문제

MySQL 쿼리에 사용자의 입력이 삽입 될 때 사용자 입력에서 교체 해야하는 위험한 문자는 무엇입니까? 나는 인용문, 이중 인용문, r 및 n에 대해 알고 있습니다. 다른 사람이 있습니까?
(매개 변수를 수락하는 스마트 커넥터를 사용하는 옵션이 없으므로 쿼리를 직접 빌드해야하며 이는 일부 모호한 언어를 포함하여 여러 프로그래밍 언어로 구현됩니다. mysql_real_escape_string PHP에서 유효하지 않음)

도움이 되었습니까?

해결책

mysql_real_escape_string () mysql.com 문서 :

From의 문자열은 연결의 현재 문자 세트를 고려하여 탈출 된 SQL 문자열로 인코딩됩니다. 결과가 배치되고 종료 Null 바이트가 추가됩니다. 인코딩 된 문자는 nul (ascii 0),“ n”,“ r”,“”,“ '”,“”및 컨트롤 -Z입니다 (8.1 절,“문자 값”참조) (엄격하게 말하면, MySQL은 쿼리의 문자열을 인용하는 데 사용 된 BackSlash와 인용 문자 만 사용되면됩니다.이 기능은 다른 문자를 인용하여 로그 파일에서 쉽게 읽을 수 있도록합니다.)


mysql_real_escape_string () 캐릭터 세트가 인식되므로 모든 능력 (특히 다중 바이트 공격 문제에 대한)을 복제하는 것은 소량의 작업이 아닙니다.

에서 http://cognifty.com/blog.entry/id=6/addslashes_dont_call_it_a_comeback.html:

AS = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

Mres ACS로 기능합니다
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

다른 팁

어떤 언어를 지원해야합니까? 자신의 글을 쓰는 것보다 언어의 내장 소독을 사용하는 것이 훨씬 낫습니다.

편집 :보고 있습니다 mysql_real_escape_string php.net에서 :

mysql_real_escape_string() MySQL의 라이브러리 기능을 호출합니다 mysql_real_escape_string, 다음 캐릭터에 백 슬래시를 준비합니다. \x00, \n, \r, \, ', " 그리고 \x1a.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top