【问题标题】:Why is it recommended to sanitize Wordpress Customizer select boxes, check boxes and radio buttons?为什么建议清理 Wordpress Customizer 选择框、复选框和单选按钮?
【发布时间】:2016-04-26 02:49:05
【问题描述】:

尊敬的 Wordpress 开发人员

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

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

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

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

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

【问题讨论】:

    标签: security sanitization input-sanitization wordpress


    【解决方案1】:

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

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

    但我不明白你如何从一个 复选框 - 除非你犯了编程错误 - 因为只有 两个可能的值?

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

    <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 并为自己创建一个管理员用户。在回发时再次“清理”复选框可确保您的应用程序只接受有效值。

    【讨论】:

    • 我明白了。所以,我想它真正归结为攻击者可以拦截发布数据并插入他/她自己的值。我想这样的 XSS 攻击会不断地由浏览器开发人员解决和处理,但是如果攻击者真的可以控制要插入的值和操作输入类型等,我可以想到不止一种情况,输入清理是徒劳的。假设我输入了字体大小。如果数据有效性是这里的目标,我猜 16 和 200 都会通过。但是,其中之一可能会毁掉一个网站。
    • XSS 预防实际上取决于网站开发人员,而不是浏览器开发人员。但是,支持 CSP 和 XSS 保护标头的浏览器可以提供帮助。在您的示例中,输入清理并不是徒劳的,您只需验证字体大小是否合理(例如
    • 唯一的问题是,这会削弱试图获得大于 30 字体大小的合法用户的用户体验(它们存在,我知道它们确实存在)。但即便如此,这也是一个观点问题。在我的书中,如果攻击者设法将值更改为与我设置的值不同的值,即使它低于可接受的边界,站点也会受到损害。如果我将它设置为 16 并期望它是 16,那么 25 就不行了。你明白我说的徒劳是什么意思吗?
    • 不确定我是否关注。如果您不希望更改值,为什么要在客户端传递它?
    • 我明白你的意思。这需要的不仅仅是验证,而是整个站点范围的安全性。我的回答集中在当前用户(攻击者)可以做些什么来破坏网站(或使用该网站的其他用户),只需要更改攻击者自己会话中的数据(例如 POST 数据)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2012-12-14
    • 1970-01-01
    • 2013-04-17
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多