所以我有一个网站,用户可以使用他们选择的用户名进行注册,并可以提交大量文本并添加评论。目前,为了避免使用XSS,我在输入数据的数据上使用strip_tags,我只输出正文中的数据,而不是属性。 我目前正在对网站进行更改,其中之一是创建一个用户页面,当用户点击用户名(链接)时加载该用户页面。这看起来像是:
<a href="example.com/user/<?php echo $username; ?>">...</a>
我担心对于$ username变量,有人可以插入
<a href="example.com/user/user" onClick="javascript:alert('XSS');">...</a>
我已经阅读了其他一些SO帖子,但没有一个给出了黑白答案。如果我在输出上的所有文本上使用以下内容,除了输入上的strip_tags:
echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
是否足以阻止所有XSS攻击,包括那些使用内联javascript:
语法的攻击?
此外,有没有办法删除实际的HTML标签而不删除“Me&gt; you”之类的内容?
谢谢!
答案 0 :(得分:3)
根据PHP5认证研究指南,有两个关于安全性的黄金法则:
目前你只关注问题的一个方面。
但我更喜欢htmlentities。
答案 1 :(得分:1)
转义取决于上下文。如果是URL,请使用URL编码(%xx),还要检查完整URL是否以“javascript:”开头。您的onclick-attribute语法不是必需的。 Onclick是一个javascript事件处理程序,因此其中的任何javascript都将运行。
请参阅OWASP XSS预防作弊表,了解如何针对不同的背景进行迁移。