网站安全防范PHP方面(基础技术防卫篇)

来源:互联网 发布:慕思城的淘宝视频 编辑:程序博客网 时间:2024/05/21 06:33



一,用户提交数据的处理

防止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 限制上传文件大小,(程序与 服务器 都必须做,因为我们只用的工具本身也会有漏洞,不要完全相信某一头)


转载自:LinLook! » 网站安全防范PHP方面,略涉及服务器端(基础技术防卫篇)