2008-10-23 4 views
4

사용자 입력이 MySQL 쿼리에 삽입 될 때 사용자 입력에서 대체해야하는 위험한 문자는 무엇입니까? 따옴표, 큰 따옴표, \ r 및 \ n에 대해 알고 있습니다. 다른 사람들이 있습니까?
(매개 변수를 허용하는 스마트 커넥터를 사용할 수있는 옵션이 없으므로 쿼리를 직접 작성해야하며 PHP의 mysql_real_escape_string과 같은 솔루션이 유효하지 않은 일부 애매한 것들을 포함하여 여러 프로그래밍 언어로 구현됩니다.)MySQL 사용자 매개 변수 살균

+0

@eyelidlessness : PHP, C# .NET을 3.0, 자바, VB 및 C가 (실제로는 언어가 개발 자체가 적합하지 않습니다 아무것도에서 단지 끔찍하지만 주입 지원 C "functions"code) – Tom

+0

실제로 언어 별 내장 탈출 함수를 찾았지만 C# .NET 관련 문서를 찾을 수 없습니다. 새 개발자는 온라인 문서가 없으면 어떻게 작동합니까? – eyelidlessness

+0

언제든지 돌아 오면 허용되는 답변을 전환하십시오. 미카 위트 만이 내 것보다 낫다. – eyelidlessness

답변

7

mysql_real_escape_string() 문서 :

계정에 연결의 현재 문자 집합을 복용, 이스케이프 SQL 문자열 인코딩에서의 문자열입니다. 결과는 ~에 배치되고 종료 널 바이트가 추가됩니다. 인코딩 된 문자는 NUL (ASCII 0), "\ n", "\ r", "\", " '", ""및 Control-Z입니다 (8.1 절. "리터럴 값" MySQL은 로그 파일에 읽을 그들을 쉽게 할 수 있습니다.이 기능은 다른 문자를 인용 이스케이프 해당 백 슬래시와 쿼리 문자열을 인용하는 데 사용되는 인용 문자가 필요합니다.)


는 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%_" 

Feature           AS  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 

+0

나는 이것에 관한 더 많은 정보를 발견했다 : http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#MySQL_Escaping – Tom

4

어떤 언어를 지원해야합니까? 스스로 작성하는 것보다 언어 내장 된 위생 처리를 사용하는 것이 훨씬 낫습니다.

편집 : php.net에 mysql_real_escape_string에서 상대 : \x00, \n, \r, \, ', "\x1a :

mysql_real_escape_string()는 다음 문자로 백 슬래시를 앞에 추가의 MySQL의 라이브러리 기능 mysql_real_escape_string를 호출합니다. mysql.com에서

+0

나는 그것을해야한다고 생각한다, 고마워! – Tom

관련 문제