【问题标题】:Should I sanitize and validate?我应该消毒和验证吗?
【发布时间】:2013-08-06 18:36:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我是经常说的人之一。
  • +1 总是。永远不要低估手头有太多时间的脚本小子的力量。不过,这是个好问题。
  • 您可以查看 wp_kses() 是否只允许某些标签(不允许使用 <iframe><script> 等?)
  • “总是”应用存在的每一种卫生设施都是破坏性的,而且非常不明智。这不是一个好建议。每种数据的使用方式都有一种正确的清洁方法

标签: wordpress validation sanitization


【解决方案1】:

简答:

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

更长的答案:

验证

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

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

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

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

消毒

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

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

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

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

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


回答您的评论:

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

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

输入:

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

输出:

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

【讨论】:

  • 那么在我需要成为管理员才能访问相关页面的情况下,这意味着什么。因为它是管理员,我应该相信它吗?我在某处看到了一张图表,希望可以随意使用:“原始输入”->“验证”->(“存储(db)”->(输出端-->)->“消毒” -->“打印”。这个逻辑对吗?
  • 永远不要相信用户输入。验证数据。即使是管理员也会犯错误。清理数据。保护您的网站免受代码注入的影响。
猜你喜欢
  • 2016-11-19
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 2017-03-23
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多