<?php |
/*云体检通用漏洞防护补丁v1.1 |
更新时间:2013-05-25 |
功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞 |
转自阿里云 |
使用方法:此代码另存为一个php文件,所有php文件包含此文件即可。 |
*/ |
$url_arr = array ( |
'xss' => "\\=\\+\\/v(?:8|9|\\+|\\/)|\\%0acontent\\-(?:id|location|type|transfer\\-encoding)" , |
); |
$args_arr = array ( |
'xss' => "[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z]{3,15}[\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\<script[\\s\\\\\\/]|\\<\\!\\[cdata\\[|\\b(?:eval|alert|prompt|msgbox)\\s*\\(|url\\((?:\\#|data|javascript)" , |
'sql' => "[^\\{\\s]{1}(\\s|\\b)+(?:select\\b|update\\b|insert(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+into\\b).+?(?:from\\b|set\\b)|[^\\{\\s]{1}(\\s|\\b)+(?:create|delete|drop|truncate|rename|desc)(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+(?:table\\b|from\\b|database\\b)|into(?:(\\/\\*.*?\\*\\/)|\\s|\\+)+(?:dump|out)file\\b|\\bsleep\\([\\s]*[\\d]+[\\s]*\\)|benchmark\\(([^\\,]*)\\,([^\\,]*)\\)|(?:declare|set|select)\\b.*@|union\\b.*(?:select|all)\\b|(?:select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\\b.*(charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\\(|(?:master\\.\\.sysdatabases|msysaccessobjects|msysqueries|sysmodules|mysql\\.db|sys\\.database_name|information_schema\\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\\.dbms_export_extension)" , |
'other' => "\\.\\.[\\\\\\/].*\\%00([^0-9a-fA-F]|$)|%00[\\'\\\"\\.]" ); |
$referer = empty ( $_SERVER [ 'HTTP_REFERER' ]) ? array () : array ( $_SERVER [ 'HTTP_REFERER' ]); |
$query_string = empty ( $_SERVER [ "QUERY_STRING" ]) ? array () : array ( $_SERVER [ "QUERY_STRING" ]); |
check_data( $query_string , $url_arr ); |
check_data( $_GET , $args_arr ); |
check_data( $_POST , $args_arr ); |
check_data( $_COOKIE , $args_arr ); |
check_data( $referer , $args_arr ); |
function W_log( $log ) |
{ |
$logpath = $_SERVER [ "DOCUMENT_ROOT" ]. "/log.txt" ; |
$log_f = fopen ( $logpath , "a+" ); |
fputs ( $log_f , $log . "\r\n" ); |
fclose( $log_f ); |
} |
function check_data( $arr , $v ) { |
foreach ( $arr as $key => $value ) |
{ |
if (! is_array ( $key )) |
{ check( $key , $v );} |
else |
{ check_data( $key , $v );} |
|
if (! is_array ( $value )) |
{ check( $value , $v );} |
else |
{ check_data( $value , $v );} |
} |
} |
function check( $str , $v ) |
{ |
foreach ( $v as $key => $value ) |
{ |
if (preg_match( "/" . $value . "/is" , $str )==1||preg_match( "/" . $value . "/is" ,urlencode( $str ))==1) |
{ |
//W_log("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交数据: ".$str); |
print "您的提交带有不合法参数,谢谢合作" ; |
exit (); |
} |
} |
} |
?> |