本文章总结了几乎所有可能出来的php防sql注入类代码,各位同学不防进入参考。
确定xp_cmdshell可执行情况
发现web虚拟目录
上传asp,php,jsp木马;
得到管理员权限;
//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;
}
1、整型参数的判断
当输入的参数yy为整型时,通常abc.asp中sql语句原貌大致如下:
select * from 表名 where 字段=yy,所以可以用以下步骤测试sql注入是否存在。
①http://xxx.xxx.xxx/abc.asp?p=yy’(附加一个单引号),此时abc.asp中的sql语句变成了
select * from 表名 where 字段=yy’,abc.asp运行异常;
②http://xxx.xxx.xxx/abc.asp?p=yy and 1=1, abc.asp运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=yy运行结果相同;
③http://xxx.xxx.xxx/abc.asp?p=yy and 1=2, abc.asp运行异常;
如果以上三步全面满足,abc.asp中一定存在sql注入漏洞。
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 ) die ( '最少$min字节' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '最多$max字节' );
}
return stripslashes_array ( $str );
}
输入的参数yy为字符串时,通常abc.php中sql语句原貌大致如下:
select * from 表名 where 字段='yy',所以可以用以下步骤测试sql注入是否存在。
①http://xxx.xxx.xxx/abc.php?p=yy’(附加一个单引号),此时abc.asp中的sql语句变成了
select * from 表名 where 字段=yy’,abc.asp运行异常;
②http://xxx.xxx.xxx/abc.php?p=yy&;nb ... 39;1'='1', abc.php运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=yy运行结果相同;
③http://xxx.xxx.xxx/abc.php?p=yy&;nb ... 39;1'='2', abc.php运行异常;
如果以上三步全面满足,abc.asp中一定存在sql注入漏洞。
//防注入函数
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;
}
//php 批量过滤post,get敏感数据
if (get_magic_quotes_gpc()) {
$_get = stripslashes_array($_get);
$_post = stripslashes_array($_post);
}
function stripslashes_array(&$array) {
while(list($key,$var) = each($array)) {
if ($key != 'argc' && $key != 'argv' && (strtoupper($key) != $key || ''.intval($key) == $key)) {
if (is_string($var)) {
$array[$key] = stripslashes($var);
}
if (is_array($var)) {
$array[$key] = stripslashes_array($var);
}
}
}
return $array;
}
//过滤
function htmlencode($str){
if(empty($str)) return;
if($str==) return $str;
$str=trim($str);
$str=str_replace(&,&,$str);
$str=str_replace(>,>,$str);
$str=str_replace($str=str_replace(chr(32), ,$str);
$str=str_replace(chr(9), ,$str);
$str=str_replace(chr(9), ,$str);
$str=str_replace(chr(34),&,$str);
$str=str_replace(chr(39),',$str);
$str=str_replace(chr(13),
,$str);
$str=str_replace(','',$str);
$str=str_replace(select,select,$str);
$str=str_replace(script,script,$str);
$str=str_replace(script,script,$str);
$str=str_replace(join,join,$str);
$str=str_replace(union,union,$str);
$str=str_replace(where,where,$str);
$str=str_replace(insert,insert,$str);
$str=str_replace(delete,delete,$str);
$str=str_replace(update,update,$str);
$str=str_replace(like,like,$str);
$str=str_replace(drop,drop,$str);
$str=str_replace(create,create,$str);
$str=str_replace(modify,modify,$str);
$str=str_replace(rename,rename,$str);
$str=str_replace(alter,alter,$str);
$str=str_replace(cast,cas,$str);
return $str;
}
//解码
function htmldecode($str){
if(empty($str)) return;
if($str==) return $str;
$str=str_replace(select,select,$str);
$str=str_replace(join,join,$str);
$str=str_replace(union,union,$str);
$str=str_replace(where,where,$str);
$str=str_replace(insert,insert,$str);
$str=str_replace(delete,delete,$str);
$str=str_replace(update,update,$str);
$str=str_replace(like,like,$str);
$str=str_replace(drop,drop,$str);
$str=str_replace(create,create,$str);
$str=str_replace(modify,modify,$str);
$str=str_replace(rename,rename,$str);
$str=str_replace(alter,alter,$str);
$str=str_replace(cas,cast,$str);
$str=str_replace(&,&,$str);
$str=str_replace(>,>,$str);
$str=str_replace($str=str_replace( ,chr(32),$str);
$str=str_replace( ,chr(9),$str);
$str=str_replace( ,chr(9),$str);
$str=str_replace(&,chr(34),$str);
$str=str_replace(',chr(39),$str);
$str=str_replace(
,chr(13),$str);
$str=str_replace('',',$str);
return $str;
}
// 函数:string_filter($string, $match_type=1)
// 功能:过滤非法内容
// 参数:
// $string 需要检查的字符串
// $match_type 匹配类型,1为精确匹配, 2为模糊匹配,默认为1
//
// 返回:有非法内容返回true,无非法内容返回false
// 其他:非法关键字列表保存在txt文件里, 分为普通非法关键字和严重非法关键字两个列表
// 作者:heiyeluren
// 时间:2006-1-18
//
//======================================================================
function lib_lawless_string_filter($string, $match_type=1)
{
//字符串空直接返回为非法
$string = trim($string);
if (empty($string))
{
return false;
}
//获取重要关键字列表和普通关键字列表
$common_file = common_list.txt; //通用过滤关键字列表
$signify_file = signify_list.txt; //重要过滤关键字列表
//如果任何列表文件不存在直接返回false,否则把两个文件列表读取到两个数组里
if (!file_exists($common_file) || !file_exists($signify_file))
{
return false;
}
$common_list = file($common_file);
$signify_list = file($signify_file);
//精确匹配
if ($match_type == 1)
{
$is_lawless = exact_match($string, $common_list);
}
//模糊匹配
if ($match_type == 2)
{
$is_lawless = blur_match($string, $common_list, $signify_list);
}
//判断检索结果数组中是否有数据,如果有,证明是非法的
if (is_array($is_lawless) && !empty($is_lawless))
{
return true;
}
else
{
return false;
}
}
//---------------------
// 精确匹配,为过滤服务
//---------------------
function exact_match($string, $common_list)
{
$string = trim($string);
$string = lib_replace_end_tag($string);
//检索普通过滤关键字列表
foreach($common_list as $block)
{
$block = trim($block);
if (preg_match(/^$string$/i, $block))
{
$blist[] = $block;
}
}
//判断有没有过滤内容在数组里
if (!empty($blist))
{
return array_unique($blist);
}
return false;
}
//----------------------
// 模糊匹配,为过滤服务
//----------------------
function blur_match($string, $common_list, $signify_list)
{
$string = trim($string);
$s_len = strlen($string);
$string = lib_replace_end_tag($string);
//检索普通过滤关键字列表
foreach($common_list as $block)
{
$block = trim($block);
if (preg_match(/^$string$/i, $block))
{
$blist[] = $block;
}
}
//检索严重过滤关键字列表
foreach($signify_list as $block)
{
$block = trim($block);
if ($s_len>=strlen($block) && preg_match(/$block/i, $string))
{
$blist[] = $block;
}
}
//判断有没有过滤内容在数组里
if (!empty($blist))
{
return array_unique($blist);
}
return false;
}
//--------------------------
// 替换html尾标签,为过滤服务
//--------------------------
function lib_replace_end_tag($str)
{
if (empty($str)) return false;
$str = htmlspecialchars($str);
$str = str_replace( '/', , $str);
$str = str_replace(, , $str);
$str = str_replace(>, , $str);
$str = str_replace(<, , $str);
$str = str_replace(, , $str);
$str = str_replace(, , $str);
$str=str_replace(select,select,$str);
$str=str_replace(join,join,$str);
$str=str_replace(union,union,$str);
$str=str_replace(where,where,$str);
$str=str_replace(insert,insert,$str);
$str=str_replace(delete,delete,$str);
$str=str_replace(update,update,$str);
$str=str_replace(like,like,$str);
$str=str_replace(drop,drop,$str);
$str=str_replace(create,create,$str);
$str=str_replace(modify,modify,$str);
$str=str_replace(rename,rename,$str);
$str=str_replace(alter,alter,$str);
$str=str_replace(cas,cast,$str);
$str=str_replace(&,&,$str);
$str=str_replace(>,>,$str);
$str=str_replace($str=str_replace( ,chr(32),$str);
$str=str_replace( ,chr(9),$str);
$str=str_replace( ,chr(9),$str);
$str=str_replace(&,chr(34),$str);
$str=str_replace(',chr(39),$str);
$str=str_replace(
,chr(13),$str);
$str=str_replace('',',$str);
$str=str_replace(css,',$str);
$str=str_replace(css,',$str);
return $str;
//html标签,可以作为扩展过滤
/*
$tags = array(/html, /head, /body, /div, /span, /doctype, /title, /link, /meta, /style, /p, /h1,, /h2,, /h3,, /h4,, /h5,, /h6, /strong, /em, /abbr, /acronym, /address, /bdo, /blockquote, /cite, /q, /code, /ins, /del, /dfn, /kbd, /pre, /samp, /var, /br, /a, /img, /area, /map, /object, /param, /ul, /ol, /li, /dl, /dt, /dd, /table, /tr, /td, /th, /tbody, /thead, /tfoot, /col, /colgroup, /caption, /form, /input, /textarea, /select, /option, /optgroup, /button, /label, /fieldset, /legend, /script, /noscript, /b, /i, /tt, /sub, /sup, /big, /small, /hr );
*/
}
引用是直接这样:
$xxx = htmlspecialchars($_post['xxx']);
或者
$xxx = htmlspecialchars($_get['xxx']);
http://www.bkjia.com/phpjc/629611.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/629611.htmltecharticle本文章总结了几乎所有可能出来的php防sql注入类代码,各位同学不防进入参考。 确定xp_cmdshell可执行情况 发现web虚拟目录 上传asp,php,jsp木马...