我想过滤掉,URL中的危险字符以及用户在表单中输入的危险字符
下面是我用的过滤表单输入的函数
本意是过滤用户输入的危险字符和过滤HTML格式
请问,对不我用这个函数过滤时,用户输入的内容,比如空格类的全没有了,就是没有格式了请问这是什么原因? //过滤注射以及HTML字符
function htmldecode($str){
 if(empty($str)) return;
 if($str=="") return $str;
 $str=str_replace("&","&",$str);
 $str=str_replace(">",">",$str);
 $str=str_replace("&lt;","<",$str);
 $str=str_replace("&nbsp;",chr(32),$str);
 $str=str_replace("&nbsp;",chr(9),$str);
 $str=str_replace("&",chr(34),$str);
 $str=str_replace("&#39;",chr(39),$str);
 $str=str_replace("<br />",chr(13),$str);
 $str=str_replace("''","'",$str);
 $str=str_replace("sel&#101;ct","select",$str);
 $str=str_replace("jo&#105;n","join",$str);
 $str=str_replace("un&#105;on","union",$str);
 $str=str_replace("wh&#101;re","where",$str);
 $str=str_replace("ins&#101;rt","insert",$str);
 $str=str_replace("del&#101;te","delete",$str);
 $str=str_replace("up&#100;ate","update",$str);
 $str=str_replace("lik&#101;","like",$str);
 $str=str_replace("dro&#112;","drop",$str);
 $str=str_replace("cr&#101;ate","create",$str);
 $str=str_replace("mod&#105;fy","modify",$str);
 $str=str_replace("ren&#097;me","rename",$str);
 $str=str_replace("alt&#101;r","alter",$str);
 $str=str_replace("ca&#115;","cast",$str);
 return $str;
}

解决方案 »

  1.   

    用urlencode就可以了,至于"insert"这些有可能是SQL语句的单词可以全部当做字符串来处理。
      

  2.   

    楼上的能不能说详细点
    也好让我明白
    难道PHP用了这个函数
    就不用过滤了么比如注入之类的
      

  3.   

    对于多用户输入多字符过滤可以用
    mysql_real_escape_string("用户输入字符串")
      

  4.   

    PHP有urlencode这个函数。
    防止注入的话,用urlencode先过滤一遍,然后在数据库查询时使用bindParam的方式来传递参数(请参看PHP手册),基本上就可以了。
      

  5.   

    /* 对用户传入的变量进行转义操作。*/
    if (!get_magic_quotes_gpc())
    {
        if (!empty($_GET))
        {
            $_GET  = addslashes_deep($_GET);
        }
        if (!empty($_POST))
        {
            $_POST = addslashes_deep($_POST);
        }    $_COOKIE   = addslashes_deep($_COOKIE);
        $_REQUEST  = addslashes_deep($_REQUEST);
    }
      

  6.   

    <?php
    function unhtml($content)
     {
        $content=htmlspecialchars($content);
        $content=str_replace(chr(13),"<br>",$content);
        $content=str_replace(chr(32),"&nbsp;",$content);
       
       return $content;
     }
    ?>
      

  7.   

    请问一下,下面这个函数足够安全么?
    如果不足够的话,请问怎么修改?//www.zzcms.com
    //过滤POST和GET传递值
    function check_str(){
    //过滤以GET传递的信息
    foreach($_Get as $str_row=>$str){
    if(is_numeric($str)){
    return intval($str);
    }else{
    return check_safe_str($str);
    }
    }
    //过滤以POST传递的信息
    foreach($_POST as $str_row=>$str){
    if(is_numeric($str)){
    return intval($str);
    }else{
    return check_safe_str($str);
    }
    }
    }//过滤安全字符
    function check_safe_str($str){
    if (!get_magic_quotes_gpc()) {
    return addslashes($str);
        }
        return $str;
    }
      

  8.   

    请问一下,下面这个函数足够安全么? 
    如果不足够的话,请问怎么修改? //www.zzcms.com
    //过滤POST和GET传递值
    function check_str(){
    //过滤以GET传递的信息
    foreach($_Get as $str_row=>$str){
    if(is_numeric($str)){
    return intval($str);
    }else{
    return check_safe_str($str);
    }
    }
    //过滤以POST传递的信息
    foreach($_POST as $str_row=>$str){
    if(is_numeric($str)){
    return intval($str);
    }else{
    return check_safe_str($str);
    }
    }
    }//过滤安全字符
    function check_safe_str($str){
    if (!get_magic_quotes_gpc()) {
    return addslashes($str);
        }
        return $str;
    }