如何防止属性中的XSS

时间:2011-08-15 00:01:08

标签: php html xss htmlspecialchars strip-tags

所以我有一个网站,用户可以使用他们选择的用户名进行注册,并可以提交大量文本并添加评论。目前,为了避免使用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”之类的内容?

谢谢!

2 个答案:

答案 0 :(得分:3)

根据PHP5认证研究指南,有两个关于安全性的黄金法则:

  1. 过滤输入
  2. 转义输出
  3. 目前你只关注问题的一个方面。

    但我更喜欢htmlentities。

答案 1 :(得分:1)

转义取决于上下文。如果是URL,请使用URL编码(%xx),还要检查完整URL是否以“javascript:”开头。您的onclick-attribute语法不是必需的。 Onclick是一个javascript事件处理程序,因此其中的任何javascript都将运行。

请参阅OWASP XSS预防作弊表,了解如何针对不同的背景进行迁移。