XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
以下是一个恶意js脚本的范例:
下面简单介绍一下Cross脚本的防御方法:
大体的思路很简单,一般XSS攻击都是程序没有过滤掉用户输入中的恶意js脚本,以致恶意的js脚本被解释执行。所以我们只需要将用户输入字符串进行检测,去掉标签,或者转义'<'字符。
PHP代码:
if($_SERVER['REQUEST_URI']) {
$temp = urldecode($_SERVER['REQUEST_URI']);
if(strexists($temp, '<') || strexists($temp, '"')) {
$_GET = shtmlspecialchars($_GET);//XSS
}
}
//取消HTML代码
function shtmlspecialchars($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = shtmlspecialchars($val);
}
} else {
$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));
}
return $string;
}
当然也可以转义:
1、htmlspecialchars() 转义特别的字符为HTML实体
•'&' (ampersand) becomes '&'
•'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
•''' (single quote) becomes ''' only when ENT_QUOTES is set.
•'<' (less than) becomes '<'
•'>' (greater than) becomes '>'
2、htmlspecialchars_decode()将实体转成HTML代码,函数1的反函数
3、 htmlentities()这个是全部转换html实体,和htmlspecialchars()区别在于,这个函数是转义全部的字符,而htmlspecialchars()仅仅转义上面限定的5个特殊字符
jsp中同样有转义函数:
综论
XSS攻击作为Web业务的最大威胁之一,不仅危害Web业务本身,对访问Web业务的用户也会带来直接的影响,如何防范和阻止XSS攻击,保障Web站点的业务安全,是定位于业务威胁防御的入侵防御产品的本职工作。
关键词:跨站攻击,防御教程,常见跨站攻击的防御教程