function quotes($content)
{
if (!get_magic_quotes_gpc()) { 
return addslashes($content); 
} else{
return $content;
}
}单纯从安全性的角度讲,这段代码的优缺点,谢谢

解决方案 »

  1.   

    只能说过滤了大部分的注入,但是做不到完全用adodb这个通用的数据库查询库比较好
      

  2.   

    这个函数不是为防止注入而设的!
    这个函数只是为了将传入的数据直接写入数据库而设计的
    他并不能保证从其他途径得到的数据也进行了必要的转义处理php基本的数据库操作函数已经能够完成一般的防止sql注入的工作,并不需要自己另外处理
      

  3.   

    参考:if (get_magic_quotes_gpc()) {
      $name = stripslashes($name);
      }else{
      $name = mysql_real_escape_string($name);}
      mysql_query(“SELECT * FROM users WHERE name=’{$name}’”);
      

  4.   

    这个函数只能说是,在sql语句拼凑之前,对指定内容转义,但是说对sql注入起多大作用,关键还是要看使用的人是否在每个sql脚本对数据进行转义!真不如用一些现成的框架,在执行sql查询之前,对所有内容进行过滤和转义,而不用在程序每个地方都要考虑是否用转义和过滤!
      

  5.   


    function check_input($value)
    {
    if(is_array($value))
    {
    foreach ($value as $k=>$values)
    {
    //自动过滤掉单引号,因为我构造的sql语句中,用的是单引号“包装”值
    if(stripos($values,"'"))
    {
    $values = str_ireplace("'",'',$values);
    //echo "<script>alert('信息中英文的单引号会被自动过滤掉');</script>";
    }
    $values = strip_tags($values);
    if(!get_magic_quotes_gpc())
    {
    $values = addslashes($values);
    }
    //$values= htmlspecialchars($values); //这个大家觉得有必要加上么
    $key[] = $k;
    $arr[] = trim($values);
    }
    $return = array_combine($key,$arr);
    }
    else
    {
    if(stripos($value,"'"))
    {
    $value = str_ireplace("'",'',$value);
    }
    $value = strip_tags($value);
    if(!get_magic_quotes_gpc())
    {
    $value = addslashes($value);
    }
    $return = $value;
    }
    return $return;
    }
    不知道这个怎么样,希望大伙儿拍砖mysql_real_escape_string挺好的,我没加进去,因为mysql_real_escape_string必须在连接数据库之后才能使用
      

  6.   

    function quotes($content)
    {
      return get_magic_quotes_gpc() ? $content : addslashes($content);
    }这个可以应付SQL注入了
    但还要考虑其他: XSS,最大长度等