为什么我的代码容易受到XSS攻击?(Why my code vulnerable to xss at

2019-08-19 09:04发布

我有PHP代码这样的

<?php
    $input_from_user = "w' onclick = 'alert(document.cookie);'";
    $i_am_barcelona_fan = htmlentities($input_from_user);
?>
<input type = 'text' name = 'messi_fan' value ='<?php echo $i_am_barcelona_fan;?>' />

我使用htmlentities从XSS攻击保护,但还是把我的弱点上面的字符串。 为什么我的代码容易受到XSS攻击? 我怎样才能从它我的代码保护?

Answer 1:

你不告诉PHP转义引号,以及,你应该使用htmlspecialchars()代替:

<input type = 'text' name = 'messi_fan' value ='<?php echo htmlspecialchars($input_from_user, ENT_QUOTES, 'UTF-8'); ?>' />

演示



Answer 2:

永远不要(永远)信任介绍给你的PHP代码的外国输入。 始终消毒并在代码中使用它之前验证外国输入。 该filter_var和filter_input功能可以消毒文字和验证文本格式(例如电子邮件地址)。

外来输入可以是任何东西:$ _GET和$ _POST形式的输入数据,在$ _SERVER超全局一些值,并且HTTP请求经由身体的fopen(“PHP://输入”,“R”)。 请记住,国外输入不限于形成用户提交的数据。 上传和下载的文件,会话值,Cookie数据,以及来自第三方的Web服务数据是外国输入了。

而国外的数据可以存储,合并,后来访问,它仍然是外国输入。 每次处理时间,输出,串联,或在您的代码数据,问自己,如果数据被正确过滤,能不能信任。

数据可能会有所不同根据其目的进行过滤。 例如,当未经过滤的外国输入被传递到HTML页面的输出,它可以在您的网站上执行HTML和JavaScript! 这就是所谓的跨站点脚本(XSS),可以是一个非常危险的攻击。 避免XSS的一种方式是通过用strip_tags功能删除HTML标签或转义具有特殊含义的字符与ヶ辆或用htmlspecialchars功能各自的HTML实体将其输出到你的页面之前,消毒所有用户生成的数据。

另一个例子是通过被在命令行上执行的选项。 这可以是非常危险的(并且通常是一个坏主意),但你可以使用内置的escapeshellarg功能消毒执行的命令的参数。

最后一个例子是接受外来输入来确定一个文件从文件系统加载。 这可以通过更改文件名的文件路径被利用。 您需要删除“/”,“../”,空字节,或其他字符的文件路径,以便它不能加载隐藏的,非公开的,或敏感文件。

了解数据过滤( http://www.php.net/manual/en/book.filter.php )

了解filter_var( http://php.net/manual/en/function.filter-var.php )



文章来源: Why my code vulnerable to xss attack?
标签: php html xss