关于防止有害事物被保存到数据库的最后一行是我们都同意的
问题是“有害”在很大程度上与上下文有关。数据库中的 JavaScript 本身没有害处——只有在另一个用户会话中输出到 HTML 时才会“有害”。其结果是这种类型的漏洞(XSS)可以通过输出编码更好地处理。也就是说,当内容输出到页面时,它应该是 HTML 编码的。这将使脚本标签被输出,<script;>
它只是将文字实际输出<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
并将自己创建为管理员用户。在回发时再次“清理”复选框可确保您的应用程序只接受有效值。