>백엔드 개발 >PHP 튜토리얼 >mysql_real_escape_string() 안티 주입에 대한 자세한 설명을 구합니다.

mysql_real_escape_string() 안티 주입에 대한 자세한 설명을 구합니다.

WBOY
WBOY원래의
2016-08-04 09:20:561431검색

mysql_real_escape_string()은 넓은 바이트 및 삽입 문제를 해결할 수 있는 addlashes() 및 mysql_escape_string()에 대한 좋은 대안으로 간주되지만 공식적인 설명은 불분명합니다.

mysql_real_escape_string() 안티 주입에 대한 자세한 설명을 구합니다.

mysql_real_escape_string — 연결의 현재 문자 집합을 고려하여 SQL 문에 사용된 문자열의 특수 문자를 이스케이프합니다.

이 문장이 잘 이해가 안 되네요. 현재 연결 문자 집합이 무엇을 의미하는지 생각해보면 전문가가 자세히 설명해 주실 수 있을까요?

참조:
http://php.net/manual/zh/function.mysql-real-escape-string.php
http://www.cnblogs.com/suihui/archive/2012/ 09/20/2694751.html
http://www.neatstudio.com/show-963-1.shtml

추가 질문: @佢작품작작
1. 추가된 내용은 mysql로 ​​옮겨지지 않아서 ' or 1=1;-- s를 주입하면 여기에 주입된 내용이 결국 mysql로 ​​옮겨져 실행되는 것 아닌가요? 🎜>참고: https://segmentfault.com/q/1010000005994443

2.

현재 연결의 문자셋을 변경한다는게 무슨 뜻인가요?并考虑到连接的当前字符集

답글 내용:

mysql_real_escape_string()은 넓은 바이트 및 삽입 문제를 해결할 수 있는 addlashes() 및 mysql_escape_string()에 대한 좋은 대안으로 간주되지만 공식적인 설명은 불분명합니다.

mysql_real_escape_string() 안티 주입에 대한 자세한 설명을 구합니다.

mysql_real_escape_string — 연결의 현재 문자 세트를 고려하여 SQL 문에 사용된 문자열의 특수 문자를 이스케이프합니다.

이 문장이 잘 이해가 안 되네요. 현재 연결 문자 집합이 무엇을 의미하는지 생각해보면 전문가가 자세히 설명해 주실 수 있을까요?

참조:

http://php.net/manual/zh/function.mysql-real-escape-string.php
http://www.cnblogs.com/suihui/archive/2012/ 09/20/2694751.html
http://www.neatstudio.com/show-963-1.shtml

추가질문: @佢작품작작

1. 추가된 내용은 mysql로 ​​옮겨지지 않아서
를 인젝션하면 여기에 인젝션된 내용이 결국 mysql로 ​​옮겨져 실행되는거 아닌가요? 🎜>참고: https://segmentfault.com/q/1010000005994443' or 1=1;-- s
2.

현재 연결의 문자셋을 변경한다는게 무슨 뜻인가요?

并考虑到连接的当前字符集

mysql gbk 더블바이트 인젝션에 관한 내용입니다

예를 들어, 사용자가 로그인하는 경우 SQL 문이 다음과 같다고 가정합니다.


$sql = "select * from user where user_name='$username' and password='$password'";1. 주입 지점이 있고 탈출구가 없는 경우. 매개변수 사용자 이름=' 또는 1=1;-- s를 전달하면 이때의 SQL 문은

입니다.

$sql = "select * from user where user_name='' or 1=1;-- s ' and password='$password'"; --는 주석 문자이므로 나중에 우회 성공 여부를 판단할 필요가 없습니다

2 주입 지점이 존재하고 특수 문자 이스케이프가 사용되는 경우. 그렇다면 이때의 SQL 문은

$sql = "select * from user where user_name='' or 1=1;-- s ' and password='$password'"; 우회 불가

3 이때 문제가 발생합니다. 한 멋진 해커가 gbk 인코딩에 wide byte injection이 있다는 것을 발견했습니다. 이때 username=�' 또는 1=1;--

을 전달합니다.

이번에 실행된 sql문은 다음과 같습니다.

우회 성공

$sql = "select * from user where user_name='運' or 1=1;-- s ' and password='$password'"; 이 문제를 해결하는 방법

mysql_real_escape_string — 연결의 현재 문자 집합을 고려하여 SQL 문에 사용된 문자열의 특수 문자를 이스케이프합니다.

메서드에 의한

문의 이스케이프 메커니즘은 현재 데이터베이스 연결의 문자 집합이 변경됨에 따라 변경됩니다. 동일한 mysql_real_escape_string 문의 경우 이스케이프된 결과는 다른 문자 집합에서 동일하지 않을 수 있습니다. SQL SQL중요:

메소드는

버전 mysql_real_escape_string 이후 사용되지 않는 것으로 표시되어 mysql 버전 PHP 이후 제거된 5.5.0 확장에 속합니다. 데이터베이스 작업에는 PHP 또는 7 확장자를 사용하세요. 데이터베이스 문자 집합에는 mysqli 또는 PDO(더 좋음)을 사용해 보세요. utf8

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.