如何防止在查询字符串中放置<script>元素的XSS攻击?</script>

时间:2011-02-05 09:00:02

标签: php xss

  

可能重复:
  What are the best practices for avoid xss attacks in a PHP site

例如:

http://www.mid-day.com/searchresult.php?query=%3Cscript%3Ealert%28%22This%20is%20vulnerable%20for%20XSS%20..%20by%20binny%22%29%3C/script%3E

此网站有一个基于XSS DOM的漏洞我想知道导致此漏洞的原因以及如何防止它?

3 个答案:

答案 0 :(得分:3)

在输出值之前,您应该始终对来自用户的值进行HTML编码,例如查询字符串参数。您可以使用htmlentities功能。

而不是:

$str = $_GET['a'];
echo $str;

使用:

$str = $_GET['a'];
echo htmlentities($str);

答案 1 :(得分:3)

你永远不应直接回应$ _REQUEST,$ _POST,$ _GET或$ _SERVER变量中的内容。

如果你有这样的事情:

index.php?text=hai

你说:

echo $_GET['text']

这不安全。 如果你把脚本放在那里或其他东西:

index.php?text=<script>alert(document.cookie);</script>

它将显示文档cookie。不太安全。

提交内容时,$ _REQUEST和$ _POST也是如此。并使用$ _SERVER ['THIS_URI'] ......

index.php?url=<script><!-- something --></script>

你做了

<form action="<?php echo $_SERVER['THIS_URI']; ?>">然后你也得到了一个XSS黑客。

始终使用htmlentities($string)并在MySQL查询中mysql_real_escape_string($string)

问候。

答案 2 :(得分:1)

您可以选择HTML Purifier

  

HTML Purifier符合标准   用PHP编写的HTML过滤器库。   HTML Purifier不仅会删除所有内容   恶意代码(俗称为   XSS )经过全面审核,
  它安全但宽容的白名单   还将确保您的文件   符合标准,只有一些东西   可以全面实现   了解W3C的规范。

内置的PHP函数不会响应各种攻击,这也是需要这种开源解决方案的原因。

我还建议你看看: