如题,希望大家能给些思路!

解决方案 »

  1.   

    检查sql注入还是防止sql注入...
      

  2.   

    回复楼上:
        检测sql注入
      

  3.   

    检测这个,治标不治本,很容易就绕过了,形同虚设,而且会过滤掉不该过滤的东西。
    建议你在执行每一个SQL查询的时候都注意该问题。
    非要这样的话,那就检测$_GET、$_POST和$_COOKIE中的每一个元素以及元素中的子元素,是否包含:
    '
    "
    SELECT三类字符。
      

  4.   

    问题就是,如果用户正常提交时,内容也包括上述几种字符,那么就悲剧了。而且可以通过Double Encoding之类的方式使得这类过滤毫无防御力。
      

  5.   

    http://blog.csdn.net/wbandzlhgod/article/details/6653584
      

  6.   

    最好在生成SQL语句时使用mysql_real_escape函数对字符串进行转义过滤,既不影响用户体验,也很安全。
      

  7.   

    5楼正解,如果仅仅是检测是否有sql注入的话,很简单,就是检查你所取到的参数中是否含有sql语句的关键字['select','update','delete',....]等。如果防止sql注入的话,也有很多方法:8楼说的mysql_real_escape函数
    或者当检测到sql注入的时候给予提示等。
      

  8.   

    function inject_check($str){
     $tmp=preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $str); // 进行过滤
     if($tmp){
      echo "输入非法注入内容!";
      exit();
     }else{
      return $str;
     }
    }
    $id=inject_check($_GET['id']);
    echo $id;
    麻烦哪位能给我讲讲这段代码是什么意思了,那个美元符是什么意思了,那个过滤的函数具体的过滤过程是什么了?小弟刚学这些,各种不懂呀
      

  9.   

    1、过滤检查查询语句
    2、sql语句书写规范,记着加单引号
      

  10.   

    可以负责任的跟你说,除非你的系统允许传入整句的 sql 指令,并直接执行。php 不存在 sql 注入的可能性!
      

  11.   

    这是很那啥的方法根本不需要这样写。直接一个设定magic_quote +addslashes就可以了。
    头文件:
    function y_addslashes($string) {
     if(is_array($string)) {
      foreach($string as $key => $val) {
       $string[$key] = y_addslashes($val);
      }
     } else {
      $string = addslashes($string);
     }
     return $string;}set_magic_quotes_runtime(0);
    y_addslashes($_GET);
    y_addslashes($_POST);
    y_addslashes($_COOKIE);然后你再查询时候记得把所有值都用单引号围起来,
    mysql_query("select * from `doc_info` where `id`='" . $_GET['id']."'");基本就没法注入了。不过xss提防反而要麻烦点。
      

  12.   

    (1)要实现检测成功最直观的方法就是通过注入SQL特殊字符判断页面返回结果是否报错,但是网站一般来说会关闭报错信息,因此不一定能判断成功;(2)第二个方法就是注入删除或者更新SQL语句,再查看语句是否执行成功。
      

  13.   


    没发现这么多年总去php站后台提权玩,头回听说php不能注入。。
      

  14.   

    你就吹吧!
    魔术开,无机会
    魔术关,用函数(addslashes或其他同类)转义单引号,无机会
      

  15.   

    set_magic_quotes_runtime(0);
    $_POST=Add_S($_POST);
    $_GET=Add_S($_GET);
    $_COOKIE=Add_S($_COOKIE);function Add_S($array){
        foreach($array as $key=>$value){
            if(!is_array($value)){
                $value=str_replace("&#x","& # x",$value);//过滤一些不安全字符
                $value=preg_replace("/eval/i","eva l",$value);//过滤不安全函数
                !get_magic_quotes_gpc() && $value=addslashes($value);
                $array[$key]=$value;
            }else{
                $array[$key]=Add_S($array[$key]); 
            }
        }
        return $array;
    }
    不要告诉我,你没看懂这个
      

  16.   

    我是根据mysql字段生成配置文件过滤sql语句
      

  17.   


    magic_quote_gpc开了也有机会,鸡肋功能,各种问题。。php从前几个版本开始就不再支持魔术功能了,这玩意太悲剧。每个值都addslashes,包括SQL的字段名,绝对OK。
      

  18.   

    需要这么被催嘛?SQL写规范点就完事了.