문제

현재이 프로세스를 사용하여 사용자가 입력 한 댓글을 소독/필터로 사용하고 있습니다.
이것은 슬래시를 벗기는 데 사용됩니다

 if (get_magic_quotes_gpc()) {
        function stripslashes_deep($value)
        {
            $value = is_array($value) ?
                        array_map('stripslashes_deep', $value) :
                        stripslashes($value);

            return $value;
        }

        $_POST = array_map('stripslashes_deep', $_POST);
        $_GET = array_map('stripslashes_deep', $_GET);
        $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
        $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
    }

그런 다음 주석은이 기능을 통해 데이터를 소독합니다 ...

   function my_strip_tags($str) {
                $strs=explode('<',$str);
                $res=$strs[0];
                for($i=1;$i<count($strs);$i++)
                {
                    if(!strpos($strs[$i],'>'))
                        $res = $res.'&lt;'.$strs[$i];
                    else
                        $res = $res.'<'.$strs[$i];
                }
             return strip_tags($res);   
    }

이 후에는 준비 된 명령문을 사용하여 데이터베이스로 바로 들어갑니다 ..

function add_comment($comment,$type,$update_id,$user_id){
            $query="INSERT INTO comment_updates (updateid,userid,comment) VALUES(?,?,?)";
                if($stmt=$this->conn->prepare($query)) {
                $stmt->bind_param('sss',$update_id,$user_id,$comment);
                $stmt->execute();
                    if($this->conn->affected_rows==1){
                    $stmt->close();
                    return true;
                    }
            }
        }

나는 이것이 충분히 안전한지 또는 그들이 다른 더 나은 대안인지 알고 싶었습니다 ... 감사합니다

도움이 되었습니까?

해결책

자신의 HTML 소독제를 쓰지 마십시오. XSS 구멍을 만들 것입니다.

자신의 글을 쓰려면 적어도 ha.ckers.org xss 스모크 테스트 그것에 대하여

그 테스트와 필터의 htmlpurifier 비교, 당신은 HTML 소독이 얼마나 복잡한 지, 그리고 왜 그것을 전문가에게 맡겨야하는지에 대한 좋은 아이디어를 얻을 수 있어야합니다.

다른 팁

데이터를 데이터베이스에 저장하는 것에 대해 생각할 때 가장 중요한 것은 데이터베이스를 탈출하는 것입니다. 사용 mysql_real_escape_string, 또는 mysqli_real_escape_string, 또는 PDO::quote, 사용중인 DB에 따라 (또는 Oracle/Pg/...에 대한 기타 기능

또 다른 해결책은 준비된 진술을 사용하는 것입니다 ( mysqli::prepare 및/또는 PDO::prepare - 오래된 사람들은 지원하지 않습니다 mysql_* 확장), 귀하의 장소에서 데이터를 탈출하는 것을 다룰 것입니다 ;-)


HTML 출력에 대해 생각할 때는 두 가지 솔루션이 있습니다.

  • HTML을 수락하고와 같은 라이브러리를 사용하십시오 htmlpurifier 필터링/청소; 그것은 어떤 태그와 속성이 허용되는지 정확하게 지정할 수 있으며, 출력으로 깨끗하고 유효한 HTML을 제공합니다.
  • Doinig처럼 HTML을 제거하려고 노력하십시오. 항상 잘 작동하는 것은 아닙니다 (특별한 경우를 잊어 버리면 어떻게됩니까?)
  • HTML을 탈출하십시오 htmlentities 또는 htmlspecialchars : 반드시 멋져 보이지는 않지만 출력은 사용자의 입력처럼 보입니다.

나는 첫 번째 또는 마지막 솔루션과 함께 갈 것입니다. 당신은 더 "위험한"느낌이지만, 그것은 단지 느낌 일뿐입니다 ^^ (일반적인 아이디어는 "바퀴를 재창조하지 마십시오")

마법 따옴표 처리는 괜찮지 만 따옴표가있는 매개 변수를 만들면 키를 제거해야합니다. :)

스트립 태그는 실제 HTML 필터 라이브러리를 사용하는 것이 좋습니다. HTML과 관련된 비틀기와 회전이 너무 많아서 한 번만 만들고 잊어 버린 것을 믿어서는 안됩니다. 사람들은 HTML 필터를 만드는 데 시간을 보내므로 작업을 유리하게 사용하십시오.

"DB로 곧장"에 관해서는, 바운드 매개 변수에 있습니다. 확실히 좋습니다. 바인딩 매개 변수에 안전하게 넣을 수 있습니다. 인용문이있는 문자열에서 결과를 피하기를 바랍니다.

데이터베이스에 넣을 때 모든 문자를 탈출하십시오. 검색 및 표시시 <sometag> 따라서 코드로 취급되는 대신 표시됩니다.

PHP는 위생 기능이 거의 알려지지 않았지만 강력한 내장을 가지고 있습니다. 나는 그들을 사용하는 것이 좋습니다 :

PHP의 입력 필터링

filter_input 그리고 filter_var

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top