PHP에서 큰 따옴표 나 작은 따옴표를 이스케이프 처리해야하는 이유는 무엇입니까? 그렇게 할 때 특별한 이점이 있습니까? 아니면 그냥 좋은 습관입니까?PHP에서 질문을 작성하는 큰 따옴표, 작은 따옴표를 왜 사용해야합니까?
답변
쿼리를 작동시키고 안전하게해야합니다. 다음 코드를 고려하십시오
$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
알았지 만 이것이 MySQL 인젝션을 어떻게 막을 수 있습니까? – user962206
누군가가 자신의 이름을' '로 입력하는 경우; DROP TABLE 사용자; -'.하지만 mysql은 하나의 쿼리 만 실행하므로 로그인하는 동안 공격이 더 많이 발생할 수 있습니다. SELECT * FROM users WHERE username = ''OR 1; - AND password = ...' – nickf
@ user962206 SQL injection 예제를 추가했습니다. – flowfree
는, 쿼리는 작은 따옴표의 장소에서 끝납니다. 그래서 귀하의 쿼리가 성공적으로 실행되지 않습니다!
예.
$qry = "SELECT * FROM user WHERE email='[email protected]'";
그것은 잘 작동하지만 하나가 email='test'@test.com 입력하는 경우에만이 아니라 하나가있는 행을 찾아 '시험'다음 쿼리에서 끝 '.
그래서 SQL 주입도 방지합니다!
이스케이프 인용 부호는 SQL 삽입을 어떻게 방지합니까? – user962206
쿼리 문자열에서 값을 가져오고 db에서 데이터를 가져 오는 것과 같은 조건에서 따옴표를 이스케이프하면 SQL 주입을 방지 할 수 있습니다. 즉, 쿼리 문자열에 name = test를 전달하는 경우 누군가가 name = te'st로 변경하면 데이터베이스가 손상 될 수 있습니다. –
s는 SQL 삽입 공격을 방지합니다. ... http://xkcd.com/327/을 http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php http://www.homeandlearn.co.uk/php/php13p5.html
때문에 바비 테이블의 PHP SQL 주입을 https://stackoverflow.com/a/60496/781181
을 방지하기 위해 SQL 주입 알려면 (SQL 주입 HTTP에 읽어 : // en.wikipedia.org/wiki/SQL_injection) – Gryphius
참고 : 큰 따옴표와 작은 따옴표 만 이스케이프하면 충분하지 않습니다. 예를 들어 MySQL에서는 백 슬래시도 이스케이프 처리해야합니다. 따라서 스스로 벗어나지 말고 제공된 함수 (예 : [mysql_real_escape_string] (http://php.net/manual/de/function.mysql-real-escape-string.php))를 사용하십시오. 더 나은 점은 값을 쿼리 문자열에 직접 연결하는 대신 매개 변수화 된 쿼리를 사용하는 것입니다. –