亲爱的WordPress开发人员
我一直无法找到这个问题的明确答案,这个问题的灵感来自this post jared关于清理和主题基金会关于主题定制器的this article。特别是,这是后者的引用:
如果输入为1(表示复选框)则为该功能 返回一个。如果输入是其他任何东西,那么函数 返回一个空字符串。这可以防止任何有害物质 保存到数据库中。
我猜,关于防止有害物质被保存到数据库的最后一行是我们都同意的。但我没有得到的是如何从复选框中获取有害的东西 - 除非你编程错误 - 因为只有两个可能的值?
因此,如果在这种情况下进行消毒是为了防止由于编程错误导致的“数据损坏”,我不知道这是好事还是坏事。
我认为,当您的输入是文本或文本字段时,清理数据才有意义 - 至少在您的目标是防止有害物质的保护时。我知道你有时需要格式化数据以使它们有用,但这是一个不同的主题。
答案 0 :(得分:1)
关于防止有害物质被拯救的最后一行 数据库是我们都同意的事情
事情是“有害”非常关乎背景。数据库中的JavaScript本身并不是有害的 - 如果在另一个用户的会话中输出到HTML,它只是“有害的”。它的结果是通过输出编码更好地处理这种类型的漏洞(XSS)。也就是说,当内容输出到页面时,它应该是HTML编码的。这会使脚本标记输出为<script;>
,除了将文字<script>
实际输出到显示的页面之外,它只会输出。
但我不知道的是你怎么能从a中获得有害的东西 复选框 - 除非你编程错误 - 因为只有 两个可能的值?
如果攻击者操纵POSTed数据,则不会。例如,如果您的复选框定义为
<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
已发送。但是,攻击者可能能够将POSTed数据操作到userlevel=admin
并创建自己的管理员用户。在回发时再次“清理”复选框可确保您的应用程序仅接受有效值。