1

对我来说,何时需要验证和清理用户输入并不总是很清楚。我想有些人可能会说“总是”,但是...

目前,我正在管理区域中创建一个带有后端主题选项的主题。我想要做的是创建一个 textarea 希望将包含将在主题的页脚中输出的 html。

我正在考虑仅在 esc_textarea() 的帮助下转义值。

所以基本上没有验证,只有一些测量来确保它不会因为它的内容而破坏文本区域(假设用户输入</textarea>)。

那么您能否回答我的具体问题,但请告诉我更多关于何时应该验证和清理的信息。所以我不是问怎么做,只是描述应该做什么。我知道所有不同的辅助函数,但不知道什么时候使用:

4

1 回答 1

0

简短的回答:

始终根据适当的上下文进行消毒。验证业务案例是否需要它。

更长的答案:

验证

验证是为了确保数据的正确性和有用性。

如果您要求用户提供电话号码或银行帐号,请验证以确保它是数字和破折号,例如 123-456-789。如果您要求提供电子邮件地址,请验证以确保 @ 和点等。

您应该验证用户输入两次。

客户端验证是为了用户体验。如果用户的输入无效,您可以通知用户,而无需往返服务器。但是,可以绕过客户端验证,因此您也应该验证服务器端,以确保数据完整性。

消毒

清理是为了确保数据安全并防止代码注入。

您应该始终根据您使用输入数据的方式进行清理。

在将用户输入存储在数据库中然后将其写入屏幕的简单情况下,您需要对数据进行两次清理。

当您将用户输入写入数据库时​​,您首先要确保它不包含 SQL 注入,因此您需要对它进行适当的清理以进行 SQL 注入。

稍后,当您想从数据库中提取数据并显示它时,您需要在将其打印到屏幕上之前对其进行消毒以进行 HTML 和 Javascript 注入。


要回答您的评论:

永远不要相信用户输入。验证数据。即使是管理员也会犯错误。清理数据。保护您的网站免受代码注入的影响。

正确的逻辑应该是这样的:

输入:

原始输入-> 验证(客户端)-> 发送到服务器-> 再次验证(服务器端)-> SQL 清理-> 存储在数据库中。

输出:

从 DB 读取数据 -> 清理 HTML 和 JS -> 打印到屏幕。

于 2013-08-05T22:42:19.810 回答