[SQL] 작은 따옴표로 묶인 변수에 SQL 주입을 방지하기 위해 반드시 htmlspecialchars의 부족인가?
SQL작은 따옴표로 묶인 변수에 SQL 주입을 방지하기 위해 반드시 htmlspecialchars의 부족인가?
많은 소스는 ENT_QUOTES가 SQL 주입을 방지하는 것만으로는 충분하지 수와 반드시 htmlspecialchars이 기능을 인용하지만, 그들 중 누구도 개념의 증거를 제공하지 않습니다. 나는 어떤 가능성에 자신을 생각할 수 없다.
우리는 다음의 예를 살펴 보자 :
$username = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
$sql = "SELECT * from user WHERE name='$username'";
mysql_query($sql,...);
하나는 SQL 주입 주위는 mysql_real_escape_string 도착 때 경우에 포함 이외의 예를 제공 할 수 있습니다 ()?
해결법
-
==============================
1.반드시 htmlspecialchars가 임계 문자 \ 0 (NUL 바이트) \ B (백 스페이스)뿐만 아니라 \ 문자를 인코딩하는데 실패하는 캐릭터.
반드시 htmlspecialchars가 임계 문자 \ 0 (NUL 바이트) \ B (백 스페이스)뿐만 아니라 \ 문자를 인코딩하는데 실패하는 캐릭터.
이를 이용하기 위해서는 여러 주입 지점과 함께 문이 필요합니다. 이 사용하면 하나의 문자열 리터럴의 닫는 구분 기호를 탈출 할 수 있으므로 다음 문자열 리터럴의 다음 시작 구분 기호로까지 확장합니다. 주입 지점 세 리터럴 스트링 각각은 두 리터럴 스트링으로 변환 될 수있다.
예를 들면 :
SELECT * from user WHERE (name='$login' OR email='$login') AND password='$password'
이제 다음과 같은 값 :
login: ) OR 1=1 /*\ password: */--
그 결과 문은 다음과 같습니다 :
SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1 /*\') AND password='*/--'
어떤 동일합니다 :
SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1
-
==============================
2.문자열을 가진 유일한 것은 SQL의 상호 작용하지 않습니다.
문자열을 가진 유일한 것은 SQL의 상호 작용하지 않습니다.
$result = "SELECT * FROM user WHERE id = " . htmlspecialchars($_GET['id']);
매개 변수가있는 쿼리가 매우 편리 곳이다.
from https://stackoverflow.com/questions/22116934/is-htmlspecialchars-enough-to-prevent-an-sql-injection-on-a-variable-enclosed-in by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 하이브 - 하이브에서 피벗 기능 (0) | 2020.05.28 |
---|---|
[SQL] 오라클 10g에 피벗 (0) | 2020.05.28 |
[SQL] MySQL의 - 장소 날짜 유형 변경 날짜 문자열? (0) | 2020.05.28 |
[SQL] 테이블 및 컬럼 이름을 전달 동적 바인딩 변수를 사용하여 (0) | 2020.05.28 |
[SQL] 어떻게 다른 컬럼에 문자열을 분리하는? (0) | 2020.05.28 |