php防止SQL注入函数[整理]

2009/12/27  |  11:54 上午分类:W(L)AMP  |  标签:  |  914 views

方法一:

/*
函数名称:inject_check()
函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全
参         数: $sql_str: 提交的变量
返 回 值:返回检测结果,ture or false
*/
 function inject_check($sql_str) {
  return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);    // 进行过滤
 }


方法二:
将所有的注入语句加上中括号,从而使其失去作用

function dowith_sql($str)
{
$refuse_str=”and|or|select|update|from|where|order|by|*|delete|’|insert|into|values|create|table|database”;
$arr=explode(“|”,$refuse_str);
for($i=0;$i {
$replace="[".$arr[$i]."]";
$str=str_replace($arr[$i],$replace,$str);
}
return $str;
}

将加上中括号的sql注入,去掉中括号

function show_sql_keyword($str)
{
$refuse_str="and|or|select|update|from|where|order|by|*|delete|'|insert|into|values|create|table|database";
$arr=explode("|",$refuse_str);
for($i=0;$i {
$replace="[".$arr[$i]."]";
$str=str_replace($replace,$arr[$i],$str);
}
return $str;
}

$str="[select] [insert] aaaa [it's not keyword]";
echo show_sql_keyword($str);

方法三
如果是PHP5的话用$mysqli->prepare($query);
或者:PDO->prepare()

/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();

做系统的话,可以用下面的代码,也是copy来的:

 /*
 函数名称:verify_id()
 函数作用:校验提交的ID类值是否合法
 参  数:$id: 提交的ID值
 返 回 值:返回处理后的ID
 */
 function verify_id($id=null) {
   if (!$id) { exit('没有提交参数!'); }    // 是否为空判断
   elseif (inject_check($id)) { exit('提交的参数非法!'); }    // 注射判断
   elseif (!is_numeric($id)) { exit('提交的参数非法!'); }    // 数字判断
   $id = intval($id);    // 整型化      

   return  $id;
 }
 /*
 函数名称:str_check()
 函数作用:对提交的字符串进行过滤
 参  数:$var: 要处理的字符串
 返 回 值:返回过滤后的字符串
 */
 function str_check( $str ) {
   if (!get_magic_quotes_gpc()) {    // 判断magic_quotes_gpc是否打开
     $str = addslashes($str);    // 进行过滤
   }
   $str = str_replace("_", "\_", $str);    // 把 '_'过滤掉
   $str = str_replace("%", "\%", $str);    // 把 '%'过滤掉      

   return $str;
 }      

 /*
 函数名称:post_check()
 函数作用:对提交的编辑内容进行处理
 参  数:$post: 要提交的内容
 返 回 值:$post: 返回过滤后的内容
 */
 function post_check($post) {
   if (!get_magic_quotes_gpc()) {    // 判断magic_quotes_gpc是否为打开
     $post = addslashes($post);    // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
   }
   $post = str_replace("_", "\_", $post);    // 把 '_'过滤掉
   $post = str_replace("%", "\%", $post);    // 把 '%'过滤掉
   $post = nl2br($post);    // 回车转换
   $post = htmlspecialchars($post);    // html标记转换      

   return $post;
 }
喜欢本文,那就收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

7条评论 关于 “php防止SQL注入函数[整理]”

  1. phphi 发表于: 十二月 28th, 2009 9:22 上午

    不赖,进来点你的Google ADS

    [回复]

    kazaff 回复:

    低调啊~~万一给GOOGLE听见了,多不好~~嘿嘿~~

    点吧,请往死里点我吧!

    [回复]

  2. SEO 发表于: 十二月 30th, 2009 4:56 下午

    博主用的是什么模板啊?真好看,支持你

    [回复]

  3. 余潇冉 发表于: 一月 1st, 2010 12:10 上午

    不用支持博主。。往死里踹。。作死的踹。。!!O(∩_∩)O哈哈哈~

    [回复]

    kazaff 回复:

    俺咋滴你啦啊~~作死的恨俺?

    [回复]

    余潇冉 回复:

    just a joke。。。+_+ohoho

    [回复]

    kazaff 回复:

    就知道~

    [回复]


发表您的评论