해커가 PHP 제출에서 GET 또는 POST 메소드를 탈출 할 수있는 가장 빠른 장소는 무엇입니까? 내 처리 형태의 제 라인은 예를 들어POST 또는 GET 변수 깨우기 PHP, 보안
,
:
$id= $_GET['id'];
$post_id= $_POST['post_id'];
이 이미 변수가 필터링되지 않은 동일하게 설정 될 때 실행되는 일부 악성 코드를 삽입 할 수 가져 및 소식 ?
감사
해커가 PHP 제출에서 GET 또는 POST 메소드를 탈출 할 수있는 가장 빠른 장소는 무엇입니까? 내 처리 형태의 제 라인은 예를 들어POST 또는 GET 변수 깨우기 PHP, 보안
,
:
$id= $_GET['id'];
$post_id= $_POST['post_id'];
이 이미 변수가 필터링되지 않은 동일하게 설정 될 때 실행되는 일부 악성 코드를 삽입 할 수 가져 및 소식 ?
감사
eval($_GET['foo']);
, 또는 간접 입력 후 $a = $_GET['foo']; eval($a);
이라고 입력해야합니다."="
자체는 할당 된 콘텐츠의 실행 또는 해석을 트리거하지 않습니다. 안전하다고 생각할 수도 있습니다."="
은 "같음"이라고 생각할 수 있습니다. 그러지 마. 대입 연산자를 사용하면 왼쪽 피연산자가 오른쪽 표현식의 값으로 설정됩니다 ("같음"이 아니라 "다음으로 설정 됨").$a = $_GET['a']; $a();
이 실제로 내가확인을 생각할 수있는 임원의 초기 곳입니다, 나는 nitpicker 것을 중지해야합니다.,
워크 플로우
내 제안은
가 들어오는 데이터를 신뢰하지 마십시오. 그것을 확인하십시오.
사용 $_dirty['foo'] = $_GET['foo']
다음 $foo = validate_foo($_dirty['foo']);
사용 PHP의 filter_input(), filter_var() 또는 자신의 유효성 검사 기능을 제공합니다.
로직 을 작성하는 대신 PHP filter_input()
함수를 사용할 수도 있습니다. http://www.php.net/manual/en/function.filter-input.php
$search = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
예
예 들어오는 $ _GET [ '자료'] 유효화 읽는다. 값이 정수이고 특정 범위에있는 경우에만 유효한 것으로 간주해야합니다.
$range = array('options'=>array('default'=>1, 'min_range'=>0, 'max_range'=>10));
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $range);
데이터베이스 : 사용 PDO &자는 PreparedStatements & bindValue
은 당신이 eval()
처럼 그들을 멍청한 짓을 직접 MySQL의 쿼리로 사람들을 두지 않는, 괜찮아.
그들은 대부분 문자열이기 때문에 직접적인 위험은 없습니다 (Windows에서 바이러스와 같은 것을 의미하는 경우).
여기에 당신이 얻을 수있는 몇 가지 "악성"일을이다 :
.php
파일에 쓰고 나중에 실행하십시오.)</html>
상상)"eval()이 대답이라면 잘못된 질문을하는 것이 좋습니다." - Rasmus Lerdorf, PHP의 BDFL – Sammitch
eval()에 대한 일반적인 유스 케이스가 있습니다 : 온라인 PHP 편집기. 실시간 코딩입니다. 그것이 샌드 박스 처리 된 이유입니다. –
아니, PHP 내에서 외부 입력 값을 처리하는만큼 당신이 데이터를 사용하지 않는 위험을 제기하지 않습니다 어떤 해석 언어에서는 코드와 데이터를 구별합니다.
injection에 취약 할 수 있습니다. 그리고 해석 언어에 의해 당신이 다른 방법으로 외부 데이터를 사용한다면, 처리 할 수 있는지 확인 HTML (Cross-Site Scripting), SQL (SQL Injection), PHP (Code Injection)와 같은 언어, 쉘 명령 (Command Injection), etc.
을 의미 그것 제대로.
CWE 링크 제공 용 +1 –
아니요. * 해당 변수를 사용하려고 할 때 문제가되며 악성 입력이 포함됩니다. –
요한이 한 말. 사용자로부터 입력을받을 때마다 예상했던 입력의 정확한 형식과 일치하는지 확인하고 입력 내용을 삭제하고 사용자 사양에 맞지 않는 내용은 모두 거부해야합니다. 즉, SQL 인젝션과 같은 일반적인 것들로부터 보호하기 위해 매개 변수화 된 쿼리와 같은 것을 사용해야합니다. – Sammitch
이 시퀀스는 "완벽하게"안전합니다. 변수를 가져 오지 않고 db-> get form db에 저장하고 htmlspecialchars() 또는 htmlentities()를 사용하여 html로 표시 – Harvard