2012-03-11 1 views
-4

나는 우리가 PHP/mysql 준비 stamtements에서 SQL 주입에 대해 이야기 할 때가 있다는 것을 알고있다. 그렇다고해도 충분히 확신 할 수는 없지만, 예방할 다른 효과적인 해결 방법이 있는지 알고 싶다. SQL 인젝션.php/mysql 웹 응용 프로그램에서 준비된 문 이외에 SQL 삽입을 피할 수있는 다른 옵션이 있습니까?

또한이 작은 함수를 사용하여 기본 SQL 주입 공격을 피하기 위해 문자열을 구문 분석합니다. 사용자가 입력에 입력 할 수 있습니다,하지만 난 그 문자를 허용하더라도 그것은 거의 같은 일을 할 파악, 그것은 몇 가지 기본적인 문자를 대체하기 때문에

function cleanString($str) { 
$strEncoding = mb_detect_encoding($str) != 'UTF-8' ? 'ISO-8859-15' : 'UTF-8'; 
$str = trim($str); 
$str = preg_replace('/(\s|\%20){2,}/', ' ', $str);// Elimino espacios 
$str = preg_replace('/\t|\%09|\%0b|\%0B/', ' ', $str);// Elimino tabulaciones 
$str = preg_replace('/\n|\r|\%0a|\%0A|\%0d|\%0D/', '', $str);// Elimino entradas de nueva línea 

// Caracteres especiales más importantes ", &, ', (,), -, ;, <, =, >, `, ~ 

$str = preg_replace('/\(|\)|\-{2}|;|`|~/', '', $str);// Elimino algunos caracteres especiales 
// Elimino cadenas y secuencia de bytes sospechosas 
$str = preg_replace('/((0x2)(2|6|7|8|9|d|D))|((0x3)(b|B|c|C|d|D|e|E))|0x60|0x7e|0x7E/', '', $str); 
$str = preg_replace('/\%22|\%26|\%27|\%28|\%29|\%2d|\%2D|\%3b|\%3B|\%3c|\%3C|\%3d|\%3D|\%3e|\%3E|\%60|\%7e|\%7E/', '', $str); 

return htmlspecialchars($str, ENT_QUOTES, $strEncoding); 
} 

기능은 ((,),) 문자열에 영향을 미친다.

+1

mysql 문에서 문자열을 이스케이프 처리하기 위해 mysql_real_escape_string 함수를 사용하는 것은 바람직하지 않습니까? – dldnh

+3

사용자 입력을 허용하지 마십시오. 그렇다면 절대 아무 것도 주입 할 수 없습니다. ;) –

+2

자신 만의 코드를 작성하는 대신 준비된 명령문이나 데이터베이스 라이브러리를 사용하십시오. 충분하다. –

답변

0

mysql_real_escape() 및 htmlspecialchars()를 사용하여 입력을 필터하면 주입을 중지하고 XSS (?)를 중지 할 수 있습니다. 바인딩 매개 변수 및 쿼리 준비가 더 좋습니다.

관련 문제