2012-06-11 5 views
0

PHP에서 큰 따옴표 나 작은 따옴표를 이스케이프 처리해야하는 이유는 무엇입니까? 그렇게 할 때 특별한 이점이 있습니까? 아니면 그냥 좋은 습관입니까?PHP에서 질문을 작성하는 큰 따옴표, 작은 따옴표를 왜 사용해야합니까?

+3

을 방지하기 위해 SQL 주입 알려면 (SQL 주입 HTTP에 읽어 : // en.wikipedia.org/wiki/SQL_injection) – Gryphius

+0

참고 : 큰 따옴표와 작은 따옴표 만 이스케이프하면 충분하지 않습니다. 예를 들어 MySQL에서는 백 슬래시도 이스케이프 처리해야합니다. 따라서 스스로 벗어나지 말고 제공된 함수 (예 : [mysql_real_escape_string] (http://php.net/manual/de/function.mysql-real-escape-string.php))를 사용하십시오. 더 나은 점은 값을 쿼리 문자열에 직접 연결하는 대신 매개 변수화 된 쿼리를 사용하는 것입니다. –

답변

3

쿼리를 작동시키고 안전하게해야합니다. 다음 코드를 고려하십시오

$name = "O'reilly"; 
$sql = "INSERT INTO users (name) VALUES ('$name')"; 

결과 SQL은 다음과 같이 될 것입니다 :

INSERT INTO users (name) VALUES('O'reilly'); 

단순히 작동하지 않는. 적절하게 이스케이프 처리해야합니다.

INSERT INTO users (name) VALUES('O\'reilly'); 

다른 특수 문자에도 동일하게 적용됩니다.

DELETE FROM users WHERE username='$username'; 

$username$_POST에서 얻을 수있다 :


방지 SQL 주입이 쿼리를 생각해 보자. 공격자가 $username' OR 1; -- 같은 문자열을 게시 관리하는 경우 쿼리이되고 :

유효하며 WHERE 항상 true로 평가하고 당신이 당신의 화를 사용자에게 좋은 설명을 제공해야합니다
DELETE FROM users WHERE username='' OR 1; -- '; 

.

은 참조 : 당신이 따옴표를 탈출하지 않으면 Best way to prevent SQL Injection in PHP

+0

알았지 만 이것이 MySQL 인젝션을 어떻게 막을 수 있습니까? – user962206

+0

누군가가 자신의 이름을' '로 입력하는 경우; DROP TABLE 사용자; -'.하지만 mysql은 하나의 쿼리 만 실행하므로 로그인하는 동안 공격이 더 많이 발생할 수 있습니다. SELECT * FROM users WHERE username = ''OR 1; - AND password = ...' – nickf

+0

@ user962206 SQL injection 예제를 추가했습니다. – flowfree

0

는, 쿼리는 작은 따옴표의 장소에서 끝납니다. 그래서 귀하의 쿼리가 성공적으로 실행되지 않습니다!

예.

$qry = "SELECT * FROM user WHERE email='[email protected]'"; 

그것은 잘 작동하지만 하나가 email='test'@test.com 입력하는 경우에만이 아니라 하나가있는 행을 찾아 '시험'다음 쿼리에서 끝 '.

그래서 SQL 주입도 방지합니다!

+0

이스케이프 인용 부호는 SQL 삽입을 어떻게 방지합니까? – user962206

+0

쿼리 문자열에서 값을 가져오고 db에서 데이터를 가져 오는 것과 같은 조건에서 따옴표를 이스케이프하면 SQL 주입을 방지 할 수 있습니다. 즉, 쿼리 문자열에 name = test를 전달하는 경우 누군가가 name = te'st로 변경하면 데이터베이스가 손상 될 수 있습니다. –