最新消息:

php过滤get和post的注入函数,记录攻击日志

PHP admin 4314浏览 0评论
function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){
	if(is_array($StrFiltValue))
	{
	    $StrFiltValue=implode($StrFiltValue);
	}  
	if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){   
	        slog("<br><br>操作IP: ".$_SERVER["REMOTE_ADDR"]."<br>操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>操作页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交参数: ".$StrFiltKey."<br>提交数据: ".$StrFiltValue);
	        print "360websec notice:Illegal operation!";
	        exit();
	}      
} 
function slog($logs)
{
  $toppath=$_SERVER["DOCUMENT_ROOT"]."/log.htm";
  $Ts=fopen($toppath,"a+");
  fputs($Ts,$logs."\r\n");
  fclose($Ts);
}
function get($varname,$handle){
	$value = $_GET[$varname];
	switch ($handle) {
		case 'sql':
			$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)";
			StopAttack($varname,$value,$getfilter);
			break;
		case 'html':
			$value = trim(strip_tags($value));
			break;
		default:
			$value =$value;
			break;
	}
	return $value;
}
function post($varname,$handle){
	$value = $_POST[$varname];
	switch ($handle) {
		case 'sql':
			$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|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
			StopAttack($varname,$value,$postfilter);
			break;
		case 'html':
			$value = trim(strip_tags($value));
			break;
		default:
			$value =$value;
			break;
	}
	return $value;
}

这些过滤代码是参考360给出的,然后在360的基础上进行了修改。

主要功能,就是通过自定义的 get 和post函数 来代替$_GET和$_POST来取值,并且加入了第二个参数,参数为2种,html,sql,如果是sql就执行过滤sql注入,如果是html就过滤html标签,然后 返回过滤后的值。

 

ps:要针对不同的路径进行处理,即对某些路径如后台某些加入白名单不进行相应处理,因为某些页面会用到富文本编辑器。

转自:http://psacms.com/thread-2639-1-1.html

转载请注明:jinglingshu的博客 » php过滤get和post的注入函数,记录攻击日志

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址