MySQL 사용자 매개 변수를 소독합니다
-
04-07-2019 - |
문제
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
.