1

亲爱的 Wordpress 开发人员

我一直无法找到这个问题的明确答案,这个问题的灵感来自jared about sanitization 的这篇文章和 Theme Foundation 关于 Theme Customizer 的这篇文章。特别是,这是后者的引述:

如果输入是 1(表示选中的框),则函数返回 1。如果输入是其他任何内容,则该函数将返回一个空白字符串。这可以防止任何有害的东西被保存到数据库中。

我想,关于防止有害事物被保存到数据库的最后一行是我们都可以同意的。但是我不明白的是,您如何从复选框中获取有害的任何内容-除非您犯了编程错误-因为只有两个可能的值?

因此,如果在这种情况下进行清理是为了防止:由于编程错误导致的“数据损坏”,我不知道这是好事还是坏事。

我认为只有当您的输入是文本或文本字段时,清理数据才有意义 - 至少当您的目标是防止有害内容时。我知道您有时需要格式化数据以使其有用,但这是一个不同的主题。

4

1 回答 1

1

关于防止有害事物被保存到数据库的最后一行是我们都同意的

问题是“有害”在很大程度上与上下文有关。数据库中的 JavaScript 本身没有害处——只有在另一个用户会话中输出到 HTML 时才会“有害”。其结果是这种类型的漏洞(XSS)可以通过输出编码更好地处理。也就是说,当内容输出到页面时,它应该是 HTML 编码的。这将使脚本标签被输出,&lt;script;&gt;它只是将文字实际输出<script>到显示的页面。

但是我不明白的是,您如何从复选框中获取有害的任何内容-除非您犯了编程错误-因为只有两个可能的值?

如果攻击者操纵发布的数据,则不会。例如,如果您的复选框被定义为

<input type="checkbox" name="agreeToTCs" />

这将agreeToTCs=on在检查时发送到您的应用程序。

攻击者可以操纵 POST 请求并将其更改为agreeToTCs=evil. 这相当于指定

<input type="checkbox" name="agreeToTCs" value="evil" />

在 HTML 和正在检查的框中。

为什么建议清理 Wordpress Customizer 选择框、复选框和单选按钮?

所有这一切归结为您的应用程序应该只处理有效数据。举个简单的例子,想象一个系统,它允许您在创建新用户时为新用户选择用户级别。系统设计的一部分只允许您指定一个等于或低于您自己的用户。这是为了防止低级别用户创建管理员帐户然后获得完全权限。假设您以中级用户身份登录,则下拉列表的 HTML 可能呈现如下:

<select name="userLevel">
  <option value="low">low</option>
  <option value="medium">medium</option>
</select>

当这被发布到服务器时,例如userLevel=medium被发送。但是,攻击者可能能够操纵 POST 数据userlevel=admin并将自己创建为管理员用户。在回发时再次“清理”复选框可确保您的应用程序只接受有效值。

于 2016-01-21T08:07:08.957 回答