2011-04-07 3 views
4

SQL 삽입을 방지하기 위해 기존 웹 사이트에서 작업하고 있습니다. $_GET['ID'] 전에 unsanitized되었습니다.mysql_real_escape_string()이 새 니타 이징 변수가 아닙니다.

$ID=mysql_real_escape_string($_GET['ID']); 
$sQuery=mysql_query("select * from tbl_mini_website as s1, tbl_actor_merchant as me where s1.MERCHANT_ID=$ID AND s1.MERCHANT_ID=me.MERCHANT_ID"); 

은 'mysql_real_escape_string()와 URL의 끝에서 나는 mysql_error()에서이 얻을 내가 넣어 경우

당신은 당신의 SQL 구문에 오류가 있습니다; 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 근처 '\\'AND 밖으로 mysql_real_escape_string()와 s1.MERCHANT_ID = me.MERCHANT_ID '라인에서 1

내가 얻을 :

SQL 구문에 오류가 있습니다. 근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 '\'와 s1.MERCHANT_ID = me.MERCHANT_ID '라인 1

에서 내가 무슨 그것까지 확실하지 않다? 어떤 도움이라도 대단히 감사하겠습니다.

+0

수행하기 전에 쿼리를'echo'하면 어떨까요? – zerkms

답변

6

id 인 경우 숫자로 가정합니다. 정수로 변환하면 어떻습니까? 내가 당신에게 줄 수

$ID = (int) $_GET['ID']; 

가장 좋은 조언은 check out PDO 사용 바인딩 매개 변수입니다.

+0

아마도 원점 솔루션은 정수 필드에서 작동하지 않을 것입니다. 프랭크가 따옴표를 붙이는 것이 옳다고 생각합니다. – Dinah

+2

@Dinah : 둘 다 맞습니다. 사실, Frank Farmer는 mysql _...에 따옴표를 추가하지 않고 alex - 숫자는 따옴표로 묶지 말고 숫자로 사용합니다 (캐스팅/성능 문제가 발생할 수 있음). – zerkms

5

mysql_real_escape_string은 이스케이프하지만 인용하지 않습니다.

시도 :

$sQuery=mysql_query("select * from tbl_mini_website as s1, tbl_actor_merchant as me where s1.MERCHANT_ID='$ID' AND s1.MERCHANT_ID=me.MERCHANT_ID"); 

가 더 일반적으로, 내가 좋아하는, 함수에서이 두 가지를 포장하는 경향이있다 : 당신은 당신이 원하는 라인을 찾을 수 있기 때문 유용

function quoteValue($value) { 
    return "'" . mysql_real_escape_string($value) . "'"; 
} 

보다 세련된 인용 동작 (특히 유니 코드, 제어 문자 등을 처리 할 때)

+0

감사합니다! 나는 한 시간 동안이 일을하고 있었고 그것은 바로 내 코 밑에있었습니다. – Lienau

2

변수를 인용하지 않기 때문입니다. 여기에 당신이 준비 사용하십시오 모시 다음 입력

$_GET['ID'] = "1"; 
$ID=mysql_real_escape_string($_GET['ID']); 
SELECT ... where s1.MERCHANT_ID=1 ... 

$_GET['ID'] = "1'" 
$ID=mysql_real_escape_string($_GET['ID']); 
SELECT ... where s1.MERCHANT_ID=1\' ... 

$_GET['ID'] = "1'" 
SELECT ... where s1.MERCHANT_ID=1' ... 
1

필 브라운 잘이지만, 그들은 아주 오래된만큼 구식 mysql_real_escape_string or mysql_connect() 잊고 PDO를 (php`s로 이동 말아야 주어진 쿼리에)입니다

명령문, 바인드, 오브젝트 가져 오기 등등.

SQL 삽입의 차세대 다바타스 조작 및 보안을 원하면 http://php.net/manual/en/book.pdo.php에서 PDO 설명서를 읽어 보시기 바랍니다.

관련 문제