一,用户提交数据的处理
防止sql注入的过滤函数:
function luoluo_sqlsafe($string, $force = 0) {
if(!$GLOBALS['magic_quotes_gpc'] || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = luoluo_sqlsafe($val, $force);
}
} else {
$string = addslashes($string);
}
}
return $string;
}
防止xss跨站攻击的过滤函数(主要用途是过滤html标签)
function luoluo_xssafe($data, $encoding='UTF-8') {
return htmlspecialchars($data, ENT_QUOTES, $encoding);
}
//获取post数据
function luoluo_post($par,$def_value=null){
return isset($_POST[$par])?$_POST[$par]:$def_value;
}
//获取get数据
function luoluo_get($par,$def_value=null){
return isset($_GET[$par])?$_GET[$par]:$def_value;
}
/**
* 转整数
* @category 字符串类
* @param string $var
* @param $def=0
* @return int
*/
function luoluo_getNum($var , $def=0){
return is_numeric($var)?$var:$def;
}
如果你的网站允许用户提交flash ,或者添加 flash 地址那你要小心了,首先我们对param name标签简单说明一下:
<param name="allowscriptaccess" value="< span="" style="border: 0px; margin: 0px; padding: 0px;">never"/></param name="allowscriptaccess" value="<>
param name标签是在这个FLASH播放插件中嵌入的一些功能和播放参数 AllowScriptAccess 参数,它可以用来控制是否允许执行来自 swf 本身对外脚本。这个参数可以有两个值: "always" 和 "never":当 AllowScriptAccess 设置为 "never" 时,运行对外脚本会失败;当 AllowScriptAccess 设置为 "always" 时,可以成功运行对外脚本;你上边的这个意思是在flash播放插件中嵌入AllowScriptAccess 参数,且参数的值为always,即表示可以成功运行对外脚本
以上的描述说明 如果allowScriptAccess 设置的不严格,那么swf就可以获取 网站的信息,然后随意利用
例:http://t.jj.cn/index.php 这个网站
我们在这里 添加 http://0x.lv/xss.swf,然后当其他用户 看我微博的时候,就会看见
我获取到了当前页面的URL,当然当前用户的cookie ,然后将cookie 发送到我指定的服务器上,然后通过某个浏览器修改cookie,就可以。。。。嘎嘎;
这里之所以可以获取这些信息就是因为:
所以建议网站需要此类功能的时候,不要直接使用这种方式;
crossdomain.xml 配置:
crossdomain本身没有错,但是如果程序员使用不当的话,就会给网站留下严重的后患!就是 Flash crossdomain.xml 跨站请求伪造漏洞!!!
具体攻击造成方式大家自己google一些原理吧;我们所解决方案:
这是土豆的,危险状态,已经通报土豆技术了;
这是优酷的,不错;
这是人人网的,也很到位;
漏洞修复建议
配置网站根目录下crossdomain.xml文件中的allow-access-from标签值为本站域名。
默认的代码是:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
解决办法是:将以下红色代码更换成你的域名即可
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.itmop.com" />
</cross-domain-policy>
二,文件上传
程序端:
对后缀名做一个正则表达式匹配;
mime-type检查是第二道防线;
文件头检查是第三道防线;
二次渲染(图片)
入库:文件名清洗(接受数据时的临时文件名随机化、存储在文件系统上的文件名随机化、存储在数据库中的文件名要各种转义)。防止各种注入攻击、XSS。
检查文件大小。防止DoS攻击。
服务器端: 禁止上传目录的PHP解析,避免通过成为webshell;或者只解析图片格式,因为html 也可能造成xss漏洞
通过clamav对上传文件进行扫描,避免其它用户下载到病毒,遏制病毒传播;
上传文件目录的访问控制授权 644
严格配置php.ini 限制上传文件大小,(程序与 服务器 都必须做,因为我们只用的工具本身也会有漏洞,不要完全相信某一头)