我正在使用HTML Purifier来保护我的应用程序免受XSS攻击。目前我正在从WYSIWYG编辑器中净化内容,因为这是唯一允许用户使用XHTML标记的地方。
我的问题是,我是否应该在登录验证系统(或注册页面的输入字段,如电子邮件,姓名,地址等)上使用HTML Purifier用户名和密码?那里有XSS攻击的可能吗?
答案 0 :(得分:13)
您应该净化任何可能在页面上显示的内容。因为使用XSS攻击,黑客会输入<script>
标签或其他可以链接到其他网站的恶意标签。
密码和电子邮件应该没问题。密码永远不应该显示,电子邮件应该有自己的验证器,以确保它们的格式正确。
最后,请记住在内容中添加htmlentities()。
哦..看看filter_var也是如此。非常好的过滤变量的方法。
答案 1 :(得分:3)
当一个用户输入的数据可能被其他用户查看时,存在XSS风险。即使此数据目前无法查看,也不要认为不会出现这种情况。
就用户名和密码而言,您永远不应该显示密码,甚至不能以可以显示的形式存储密码(即用sha1()
加密)。对于用户名,对[A-Za-z0-9_]
等合法字符有限制。最后,正如另一个答案建议的那样,对任何可能包含保留或特殊html字符的输入数据使用您的语言html实体编码函数,这可以防止此数据在显示时导致语法错误。
答案 2 :(得分:1)
不,在登录验证期间,我不会在用户名和密码上使用HTMLPurifier。在我的应用程序中,我使用字母数字用户名和输入验证过滤器,并使用带有ENT_QUOTES的htmlspecialchars显示它们。这非常有效,比HTMLpurifier快得多。我还没有看到使用字母数字字符串的XSS攻击。 BTW HTMLPurifier在过滤字母数字内容时毫无用处,因此如果您通过字母数字过滤器强制输入字符串,则无法使用HTMLpurifier显示它。在密码方面,它们绝不应该首先显示给任何人,从而消除了XSS的可能性。如果由于某些不正当的原因你想要显示密码,那么你应该设计你的应用程序,使它只允许密码的所有者能够看到它,否则你会被困在大时间而且XSS是最少的你的担心!
答案 3 :(得分:0)
HTML Purifier将 HTML 作为输入,并生成 HTML 作为输出。其目的是允许用户输入带有一些标签,属性和值的html,同时过滤掉其他标签。这使用白名单来防止任何可以包含脚本的数据。所以这对于像WYSIWYG编辑器这样的东西很有用。
另一方面,用户名和密码不是 HTML 。它们是纯文本,因此不能选择HTML净化器。在这里尝试使用HTML Purifier会破坏数据,或者允许XSS攻击。
例如,它允许以下内容保持不变,这会在某些元素中作为属性值插入时导致XSS问题:
" onclick="javascript:alert()" href="
或者如果有人试图在他们的密码中使用特殊符号,并输入:
<password
然后他们的密码将变为空白,并使其更容易猜测。
相反,您应该对文本进行编码。所需的编码取决于上下文,但如果您坚持{strong>规则#0 和规则#1 ,则可以在输出这些值时使用htmlentities
{3}}