2009-07-31 74 views
11

我正在使用HTML Purifier来保护我的应用程序免受XSS攻击。目前,我正在净化来自所见即所得编辑器的内容,因为这是允许用户使用XHTML标记的唯一地方。HTML净化器 - 要净化什么?

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

回答

13

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

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

最后,请务必记住在内容中放置htmlentities()。

哦..看看filter_var也是。非常好的过滤变量的方式。

+3

+1 filter_var – 2009-07-31 01:54:16

3

XSS风险存在于其他用户可以查看某个用户输入的数据可能的地方。即使这些数据目前无法查看,也不要以为不需要这样做。

只要输入用户名和密码,就不应该显示密码,甚至不能以可显示的形式存储它(即用sha1()来加密)。对于用户名,对合法字符有限制,如[A-Za-z0-9_]。最后,如其他答案所示,对于任何可能包含保留或特殊html字符的输入数据,使用您的语言html实体编码函数,这可以防止此数据在显示时导致语法错误。

1

不,我不会在登录验证期间在用户名和密码上使用HTMLPurifier。在我的应用程序中,我使用字母数字用户名和输入验证过滤器,并使用ENT_QUOTES与htmlspecialchars一起显示它们。这非常有效,比HTML Purifier快得多。我还没有看到使用字母数字字符串的XSS攻击。而BTW HTMLPurifier在过滤字母数字内容时无用,所以如果您通过字母数字过滤器强制输入字符串,则无法使用HTMLpurifier显示它。当涉及到密码时,它们绝不应该首先显示给任何人,从而消除XSS的可能性。如果出于某种不合理的原因想要显示密码,那么您应该设计应用程序的方式是它只允许密码的所有者能够看到它,否则,您会受到很大的影响,XSS是最少的你的担心!

0

HTML净化器需要HTML作为输入,并生成HTML作为输出。其目的是允许用户在输入html时使用某些标签,属性和值,同时过滤掉其他的。这使用白名单来防止任何可能包含脚本的数据。所以这对于像WYSIWYG编辑器这样的东西很有用。

用户名和密码另一方面不是HTML。他们纯文本,所以HTML净化器不是一个选项。试图在这里使用HTML Purifier会破坏数据,或者允许XSS攻击。

例如,它允许通过改变以下,当在某些元素的属性值插入这可能会导致XSS问题:

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

或者,如果有人试图在他们的密码使用特殊符号,并进入:

<password 

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

相反,您应该编码文本。所需的编码依赖于上下文,但这些输出值时,你可以使用htmlentities如果你坚持规则#0规则#1,在OWASP XSS Prevention Cheat Sheet