【问题标题】:HTML Purifier - what to purify?HTML Purifier - 净化什么?
【发布时间】:2010-11-15 15:40:22
【问题描述】:

我正在使用 HTML Purifier 来保护我的应用程序免受 XSS 攻击。目前我正在从 WYSIWYG 编辑器中净化内容,因为这是唯一允许用户使用 XHTML 标记的地方。

我的问题是,我是否应该在登录身份验证系统中的用户名和密码(或注册页面的输入字段,如电子邮件、姓名、地址等)上也使用 HTML Purifier?那里有XSS攻击的机会吗?

【问题讨论】:

    标签: php html xhtml xss htmlpurifier


    【解决方案1】:

    您应该净化任何可能显示在页面上的内容。因为在 XSS 攻击中,黑客会放入<script> 标签或其他可以链接到其他网站的恶意标签。

    密码和电子邮件应该没问题。永远不要显示密码,并且电子邮件应该有自己的验证器,以确保它们的格式正确。

    最后,永远记得在内容上放入 htmlentities()。

    哦..看看filter_var。过滤变量的好方法。

    【讨论】:

    • 对于普通的文本输入,filter_var 应该足够了。对于允许 HTML 标记的文本,您应该使用 HTMLPurifier。
    【解决方案2】:

    如果一位用户输入的数据可能被其他用户查看,则存在 XSS 风险。即使这些数据当前不可见,也不要认为不需要这样做。

    就用户名和密码而言,您永远不应该显示密码,甚至将其存储在可以显示的形式中(即使用sha1() 加密它)。对于用户名,对 [A-Za-z0-9_] 等合法字符有限制。最后,正如另一个答案所建议的那样,对任何可能包含保留或特殊 html 字符的输入数据使用您的语言 html 实体编码功能,这可以防止这些数据在显示时导致语法错误。

    【讨论】:

      【解决方案3】:

      不,我不会在登录身份验证期间对用户名和密码使用 HTMLPurifier。在我的应用程序中,我使用字母数字用户名和输入验证过滤器,并使用带有 ENT_QUOTES 的 htmlspecialchars 显示它们。这非常有效,而且比 HTMLpurifier 快得多。我还没有看到使用字母数字字符串的 XSS 攻击。顺便说一句,HTMLPurifier 在过滤字母数字内容时毫无用处,因此如果您强制输入字符串通过字母数字过滤器,那么使用 HTMLpurifier 显示它是没有意义的。当涉及到密码时,它们不应该首先显示给任何人,这消除了 XSS 的可能性。如果出于某种不正当的原因您想要显示密码,那么您应该以这样一种方式设计您的应用程序,即只有密码的所有者才能看到它,否则您将被搞砸,而 XSS 是最少的你的担心!

      【讨论】:

        【解决方案4】:

        HTML Purifier 将 HTML 作为输入,并生成 HTML 作为输出。其目的是允许用户输入带有一些标签、属性和值的html,同时过滤掉其他的。这使用白名单来阻止任何可能包含脚本的数据。所以这对于 WYSIWYG 编辑器之类的东西很有用。

        另一方面,用户名和密码不是 HTML。它们是纯文本,因此不能选择 HTML 净化器。在这里尝试使用 HTML Purifier 会破坏数据,或者允许 XSS 攻击。

        例如,它允许以下内容不变,当作为属性值插入某些元素时可能会导致 XSS 问题:

        " onclick="javascript:alert()" href="
        

        或者如果有人试图在他们的密码中使用特殊符号,然后输入:

        <password
        

        那么他们的密码就会变成空白,这样就更容易猜到了。

        相反,您应该对文本进行编码。所需的编码取决于上下文,但您可以在输出这些值时使用 htmlentities,如果您坚持 rule #0rule #1,在 OWASP XSS Prevention Cheat Sheet

        【讨论】:

          猜你喜欢
          • 2014-07-24
          • 2014-04-29
          • 1970-01-01
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多