2013-08-30 1 views
-1

쿼리를 수행하기 전에 SQL 삽입 공격을 막기 위해 (을 사용하고 있습니다).php/mysql real_escape 및 특수 문자

문제는 데이터를 입력 할 경우에 특수 문자를 가지고 있다는 것입니다, MySQL은 삽입의 데이터베이스에 슬래시를 삽입하는 것 같다.

그런 다음 웹 페이지에 필드를 표시하면 슬래시가 나타납니다. 데이터베이스에 저장 어쨌든 데이터 등

이되어 표시 할 때이 슬래시를 제거하는 지속적인 유지 보수를 많이 필요로

이상적으로, 나는 디베이스 테이블에 특수 문자 앞에 슬래시를하고 싶지 않아 백 슬래시를 포함하지 않고? 예를 들어

: "밥 \ '의 데이터를"데이터베이스에

$field = "bob's data"; 
...establish database connection 
$field = mysql_real_escape_string($field); 
$sql="INSERT INTO table (field) VALUES ('$field')"; 
if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

넣습니다.

데이터베이스에서 슬래시로 끝나지 않도록 다르게 처리해야합니까?

참고 : 나는 매개 변수가있는 쿼리 또는 PDO하지만 거대한 기존의 웹 사이트와 같이 여러 가지 이유로,이 경우에 할 수 없어를 사용하는 것입니다 qureris을 할 수있는 좋은 방법을 알고있다.

미리 제안 해 주셔서 감사합니다.

+0

구글'magic_quotes' – zerkms

+0

당신은 정말 그렇게 문자 그대로'$ field'을 할당나요, 아니면'$ _GET' 또는'$ _POST'에서 왔는가? 클라이언트 입력에서 나온 것이라면, @zerkms가 언급 한 것처럼'magic_quotes'가 문제가 될 수 있습니다. 문자 그대로라면, 나는 당신이 말하는 것처럼 그것이 일어나고 있다고 생각하지 않습니다. – Barmar

+0

텍스트 영역의 게시물에서 왔습니다. 입력에 어포 스트로피가있는 경우를 설명하기 위해 문제의 방식으로 썼습니다. 나는 마술 따옴표가 켜져 있다고 생각하지 않는다. – user1904273

답변

0

나는 당신이 어떤 GET, POST, COOKIE 또는 요청 객체를 처리하기 전에이 같은 것을 사용 수 있다고 생각합니다.

function removeMagiQuotes() 
{ 
if (get_magic_quotes_gpc()) { 
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); 
    while (list($key, $val) = each($process)) { 
     foreach ($val as $k => $v) { 
      unset($process[$key][$k]); 
      if (is_array($v)) { 
       $process[$key][stripslashes($k)] = $v; 
       $process[] = &$process[$key][stripslashes($k)]; 
      } else { 
       $process[$key][stripslashes($k)] = stripslashes($v); 
      } 
     } 
    } 
    unset($process); 
} 
}