2013-02-18 1 views
0

웹 응용 프로그램에서 데이터베이스 연결 설정을 포함하는 구성 파일 인 ans는 항상 PHP 스크립트의 첫 번째 줄에로드됩니다. 어쩌면 기존의 XSS 및 SQL 주입 위험에 대해 모든 POST 및 GET 데이터를 정리하는 기능을 포함하고자합니다. 이 기능은 XSS 및 SQL 삽입을 위해 PHP에서 POST 및 GET vars를 지우는 방법

function make_safe($variable) 
{ 
    $variable = strip_tags(mysql_real_escape_string(trim($variable))); 
    return $variable; 
} 

foreach ($_POST as $key => $value) { 
    $_POST[$key] = make_safe($value); 
} 
//Same for $_GET & $_SESSION 

당신이이 문제에 대한 권장 사항이 있습니까 정말 충분한 경우

나는 확실하지 않다?

+3

두 가지 문제가 있습니다. 한 번에 하나씩 집중하십시오. SQL에 데이터를 삽입 할 때 SQL 주입을 처리합니다. HTML에 데이터를 삽입 할 때 XSS를 다루십시오. – Quentin

+0

[PHP에서 SQL 주입을 방지하는 방법?] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php)은 * 처음 * 문제가있는 복제본입니다 (SQL 삽입). XSS가 두 번째 문제입니다. 너무 방어하는 방법을 설명하는 답변이 많습니다. 주변을 검색하십시오. – Quentin

+0

위에서 언급 한 기능을 사용하면 앱에서 편집자를 사용할 수 있습니까? –

답변

3

이 기능 :

function make_safe($variable) 
{ 
    $variable = strip_tags(mysql_real_escape_string(trim($variable))); 
    return $variable; 
} 

가 작동하지 않습니다

SQL 주입 및 XSS는 두 개의 서로 다른 짐승이다. 각각 다른 이스케이프 처리가 필요하기 때문에 각 이스케이프 함수 strip_tags와 mysql_real_escape_string을 별도로 사용해야합니다. 그것들을 결합하면 각각의 보안을 무너 뜨릴 것입니다.

데이터를 데이터베이스에 입력 할 때 표준 mysql_real_escape_string()을 사용하십시오. 화면에 출력하기 전에 데이터베이스에서 항목을 쿼리 할 때 strip_tags()를 사용하십시오. 두 기능을 결합하는 것은 말의 입에서 위험 왜

: http://php.net/manual/en/function.strip-tags.php

strip_tags() 때문에 실제로 HTML 유효성을 검사하지 않는 부분 또는 깨진 태그는 더 많은 텍스트/예상보다 데이터 삭제 될 수 있습니다.

데이터베이스 필드에 형식이 잘못된 html을 입력하면 현명한 공격자가 귀하의 순진한 구현을 사용하여 귀하의 콤보에 mysql_real_escape_string()을 물리 칠 수 있습니다.

+3

mysql_real_escape_string을 사용하지 마십시오. 더 이상 사용되지 않는 mysql 확장을 완전히 사용하지 말고 PDO 또는 mysqli를 사용하십시오. – Quentin

+0

'htmlentities();'? –