鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 网站安全 > 安全设置 > >

一个防注入和让已经存在的 "一句话木马”失效的方案

来源:互联网 作者:佚名 时间:2015-10-19 08:43
1、防SQL注入 百度一下 360.cn 写过一个防SQL注入的PHP脚本。 用过来 GPC 进行检测。部分代码: $getfilter=|(and|or)\\b.+?(||=|in|like)|\\/\\*.+?\\*\\/|\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).

 
1、防SQL注入
 
百度一下 360.cn 写过一个防SQL注入的PHP脚本。 用过来 GPC 进行检测。部分代码:
 
 
 
$getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\
 
s+(TABLE|DATABASE)";
 
$postfilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTE
 
R|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
 
$cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|AL
 
TER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
 
 
 
foreach ($_GET as $key=>$value) { 
 
StopAttack($key, $value, $getfilter);
 
}
 
foreach ($_POST as $key=>$value) { 
 
StopAttack($key, $value, $postfilter);
 
}
 
foreach ($_COOKIE as $key=>$value) {
 
StopAttack($key, $value, $cookiefilter);
 
}
 
 
 
下载这个脚本。把这个脚本放到 web目录外。 然后 修改PHP.ini :
 
 
 
auto_prepend_file = 360_safe3.php
 
 
 
注:但可能会和你之前的代码 过滤和转意部分代码有冲突,自己看情况修改。 这样做以后。服务器所有存在的PHP文件,都自动得到保护了。。不用在一个一个~堵了。叽里旮旯儿的代码都护住了。。运维开发可以安心睡觉了。
 
 
 
这样做唯一的问题就是 服务器负载会多 %30 - %60。 但对于用户数据和安全来说。。你们是值得的。
 
 
 
2、让已经存在的 "一句话木马”失效
 
 
 
服务器上应该存在不少 一句话木马了。。我见到白帽子们已经都上传WEBSHELL 上去了。。菜刀也上了。 菜刀是通过 php 的 base64编码进行 POST 请求来执行PHP脚本(我自己抓包看过),所以呢 就算你按照我的第一部 加了360安全脚本是防不住已经存在的 WEBSHELL。 我们要想办法让存在的WEBSHELL失效。判断POST或者GET里有存在base64_decode 解密函数的存在,那%99就是菜刀在请求。 那么这样来做,在我说的第一部的360 安全脚本的 StopAttack哪里 修改下代码。加多一句:
 
 
 
preg_match("/base64_decode/is",$StrFiltValue) && exit('_stop attack');
 
 
 
部分代码:
 
 
 
function StopAttack($StrFiltKey, $StrFiltValue, $ArrFiltReq) {
 
global $attack_360_log;
 
if (is_array($StrFiltValue)) {
 
$StrFiltValue = implode($StrFiltValue);
 
 
preg_match("/base64_decode/is",$StrFiltValue) && exit('_stop attack');
 
 
 
if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1) {


网友评论
<