12

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

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

4

4 回答 4

13

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

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

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

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

于 2009-07-31T00:09:04.797 回答
3

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

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

于 2009-07-31T00:10:24.763 回答
1

不,我不会在登录身份验证期间对用户名和密码使用 HTMLPurifier。在我的应用程序中,我使用字母数字用户名和输入验证过滤器,并使用带有 ENT_QUOTES 的 htmlspecialchars 显示它们。这非常有效,而且比 HTMLpurifier 快得多。我还没有看到使用字母数字字符串的 XSS 攻击。顺便说一句,HTMLPurifier 在过滤字母数字内容时毫无用处,所以如果您强制输入字符串通过字母数字过滤器,那么使用 HTMLpurifier 显示它是没有意义的。当涉及到密码时,它们不应该首先显示给任何人,这消除了 XSS 的可能性。

于 2016-01-04T19:58:00.390 回答
1

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

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

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

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

或者,如果有人试图在密码中使用特殊符号,并输入:

<password

那么他们的密码就会变成空白,并且更容易被猜到。

相反,您应该对文本进行编码。所需的编码取决于上下文,但如果您在OWASP XSS 预防备忘单中遵守规则 #0规则 #1htmlentities ,则可以在输出这些值时使用

于 2017-11-16T13:40:00.717 回答