PHP正規(正則)表達式比對防止SQL注入
PHP正規(正則)表達式比對防止SQL注入
資料來源: http://www.51itstudy.com/it/article/2469.html
https://www.cnblogs.com/yydcdut/p/3496855.html
http://www.wuliaoy.com/pro/47.html
https://www.ctolib.com/topics-88220.html
01.
<?php
include("config.php");
if($_GET["id"])
{
$_GET["id"]=inject_check($_GET["id"]);
echo $id;
}
function inject_check($sql_str)
{
$check= eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);
if($check)
{
echo "非法字符!";
exit();
}else
{
return $sql_str;
}
}
?>
02.
<?php
function customError($errno, $errstr, $errfile, $errline)
{
echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";
die();
}
set_error_handler("customError",E_ERROR);
$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|ALTER|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|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq)
{
if(is_array($StrFiltValue))
{
$StrFiltValue=implode($StrFiltValue);
}
if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1&&!isset($_REQUEST['securityToken']))
{
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 "result notice:Illegal operation!";
exit();
}
}
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);
}
function slog($logs)
{
$toppath="log.htm";
$Ts=fopen($toppath,"a+");
fputs($Ts,$logs."\r\n");
fclose($Ts);
}
?>
03.
<?php
function strCheck($str)
{
$check = preg_match('/select|insert|update|delete|\#|\'|\\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/i', $str);
if ($check) {
exit("<script>
alert('请勿非法操作!');
window.history.back(-1);
</script>");
} else {
return $str;
}
}
$loginname = strCheck($_POST["loginname"]);
?>
04.
<?PHP
//https://www.ctolib.com/topics-88220.html
//PHP整站防注入程序,需要在公共文件中require_once本文件
//判断magic_quotes_gpc状态
if (@get_magic_quotes_gpc ())
{
$_GET = sec ( $_GET );
$_POST = sec ( $_POST );
$_COOKIE = sec ( $_COOKIE );
$_FILES = sec ( $_FILES );
}
$_SERVER = sec ( $_SERVER );
function sec(&$array)
{
//如果是数组,遍历数组,递归调用
if (is_array ( $array ))
{
foreach ( $array as $k => $v )
{
$array [$k] = sec ( $v );
}
} else if (is_string ( $array ))
{
//使用addslashes函数来处理
$array = addslashes ( $array );
}
else if (is_numeric ( $array ))
{
$array = intval ( $array );
}
return $array;
}
//整型过滤函数
function num_check($id)
{
if (! $id)
{
die ( '参数不能为空!' );
} //是否为空的判断
else if (inject_check ( $id ))
{
die ( '非法参数' );
} //注入判断
else if (! is_numetic ( $id ))
{
die ( '非法参数' );
}
//数字判断
$id = intval ( $id );
//整型化
return $id;
}
//字符过滤函数
function str_check($str)
{
if (inject_check ( $str ))
{
die ( '非法参数' );
}
//注入判断
$str = htmlspecialchars ( $str );
//转换html
return $str;
}
function search_check($str)
{
$str = str_replace ( "_", "\_", $str );
//把"_"过滤掉
$str = str_replace ( "%", "\%", $str );
//把"%"过滤掉
$str = htmlspecialchars ( $str );
//转换html
return $str;
}
//表单过滤函数
function post_check($str, $min, $max)
{
if (isset ( $min ) && strlen ( $str ) < $min) {
die ( '最少$min字节' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '最多$max字节' );
}
return stripslashes_array ( $str );
}
//防注入函数
function inject_check($sql_str)
{
return eregi ( 'select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile', $sql_str );
// 进行过滤,防注入
}
function stripslashes_array(&$array)
{
if (is_array ( $array ))
{
foreach ( $array as $k => $v )
{
$array [$k] = stripslashes_array ( $v );
}
}
else if (is_string ( $array ))
{
$array = stripslashes ( $array );
}
return $array;
}
?>