2011-08-05 5 views
1

은 내가 MYSQL dB에 기록하기 전에 필드에서 숫자가 아닌 모든 스트립이 기능을 사용숫자가 아닌 문자를 모두 제거하면 효과적으로 데이터를 이스케이프합니까?

function remove_non_numeric($inputtext) {return preg_replace("/[^0-9]/","",$inputtext); 

이 효과적으로 SQL 주입을 방지하기 위해 입력 데이터를 탈출합니까? mysql_real_escape_string에이 함수를 래핑 할 수 있지만 중복 될 수 있다고 생각합니다.

답변

3

가정은 모두 의 모체이고, SQL 주입의 경우는입니다. 어쨌든 mysql_real_escape_string에 랩핑하십시오.

+1

+1 절대 경계하지 마십시오. –

0

데이터를 이스케이프 처리하지 않지만 실제로는 OWASP 권장 접근 방식의 예입니다.

입력에서 숫자를 제외하고 모두 제거하면 White list을 구현하여 효과적으로 SQL 인젝션을 방지 할 수 있습니다. 결과 문자열 ( 특정 사례)을 효과적인 SQL 인젝션 페이로드로 만들 수있는 편집증은 없습니다.

코드는 변경 될 수 있으며 새로운 개발자가 상속하므로 오해됩니다. 따라서 결론, 올바른 조언, 모두 끝 그리고 모두 -는 다음 세 단계 중 하나 이상을 통해 SQL 주입에 대해 적극적으로 방지하는 것입니다. 이 순서대로. 이제까지. 단일. 시각.

  1. 안전한 데이터베이스 API를 사용하십시오. (prepared statement 또는 예를 들어 매개 변수화 된 쿼리)
  2. db 특정 이스케이프 또는 이스케이프 루틴을 사용하십시오 (mysql_real_escape_string이이 범주에 속합니다).
  3. White list 허용되는 입력 값의 도메인. (제안 된 숫자 솔루션이이 범주에 속합니다.)

mysql_real_escape_string은 모든 anti-sql-injection에 대한 대답이 아닙니다. 가장 강력한 방법은 아니지만 작동합니다. 숫자 이외의 모든 부분을 제거하는 것은 안전한 값을 나열하는 흰색이며 좋은 생각입니다.하지만 안전한 API를 사용하는 것만 큼 좋은 것은 아닙니다.

관련 문제