2014-03-28 2 views
0

해커가 PHP 제출에서 GET 또는 POST 메소드를 탈출 할 수있는 가장 빠른 장소는 무엇입니까? 내 처리 형태의 제 라인은 예를 들어POST 또는 GET 변수 깨우기 PHP, 보안

,

:

$id= $_GET['id']; 
$post_id= $_POST['post_id']; 

이 이미 변수가 필터링되지 않은 동일하게 설정 될 때 실행되는 일부 악성 코드를 삽입 할 수 가져 및 소식 ?

감사

+5

아니요. * 해당 변수를 사용하려고 할 때 문제가되며 악성 입력이 포함됩니다. –

+0

요한이 한 말. 사용자로부터 입력을받을 때마다 예상했던 입력의 정확한 형식과 일치하는지 확인하고 입력 내용을 삭제하고 사용자 사양에 맞지 않는 내용은 모두 거부해야합니다. 즉, SQL 인젝션과 같은 일반적인 것들로부터 보호하기 위해 매개 변수화 된 쿼리와 같은 것을 사용해야합니다. – Sammitch

+0

이 시퀀스는 "완벽하게"안전합니다. 변수를 가져 오지 않고 db-> get form db에 저장하고 htmlspecialchars() 또는 htmlentities()를 사용하여 html로 표시 – Harvard

답변

0
  1. 최초의 장소 - (CSRF 등 일반적으로 보안 문자 또는 일부 보안 토큰을 사용하여 피할 수) 들어오는 GET 또는 POST 데이터가있는 때, terpreted. 직접 입력하면 eval($_GET['foo']);, 또는 간접 입력 후 $a = $_GET['foo']; eval($a);이라고 입력해야합니다.
  2. 할당 연산자 "=" 자체는 할당 된 콘텐츠의 실행 또는 해석을 트리거하지 않습니다. 안전하다고 생각할 수도 있습니다.
  3. "="은 "같음"이라고 생각할 수 있습니다. 그러지 마. 대입 연산자를 사용하면 왼쪽 피연산자가 오른쪽 표현식의 값으로 설정됩니다 ("같음"이 아니라 "다음으로 설정 됨").
  4. $a = $_GET['a']; $a();이 실제로 내가

확인을 생각할 수있는 임원의 초기 곳입니다, 나는 nitpicker 것을 중지해야합니다.,

워크 플로우

  1. GET/POST = 신뢰할 수없는 변수 내용
  2. 유효성을 DB
  3. 에서
  4. 저장 준비된 문에
  5. 사용을 살균 :

    내 제안은

  6. GET 형태의 DB
  7. 탈출
  8. 표시

가 들어오는 데이터를 신뢰하지 마십시오. 그것을 확인하십시오.

사용 $_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

http://www.php.net/manual/en/pdostatement.bindvalue.php

2

은 당신이 eval()처럼 그들을 멍청한 짓을 직접 MySQL의 쿼리로 사람들을 두지 않는, 괜찮아.

그들은 대부분 문자열이기 때문에 직접적인 위험은 없습니다 (Windows에서 바이러스와 같은 것을 의미하는 경우).

여기에 당신이 얻을 수있는 몇 가지 "악성"일을이다 :

  • SQL 인젝션 공격
  • PHP 인젝션 공격 (테이블을 삭제처럼, 뭔가 나쁜 일을 할 쿼리를 깨는)
    (해커가 평가 해달라고하거나 .php 파일에 쓰고 나중에 실행하십시오.)
  • HTML/자바 스크립트 삽입 공격
    (나쁜 자바 스크립트를 실행하거나 레이아웃을 깰 수 있도록 한 페이지에 인쇄하는 경우 - 당신의 기사의 중간에 </html> 상상)
  • 단조 양식 필드
    을 , 탈옥
+1

"eval()이 대답이라면 잘못된 질문을하는 것이 좋습니다." - Rasmus Lerdorf, PHP의 BDFL – Sammitch

+0

eval()에 대한 일반적인 유스 케이스가 있습니다 : 온라인 PHP 편집기. 실시간 코딩입니다. 그것이 샌드 박스 처리 된 이유입니다. –

2

아니, PHP 내에서 외부 입력 값을 처리하는만큼 당신이 데이터를 사용하지 않는 위험을 제기하지 않습니다 어떤 해석 언어에서는 코드와 데이터를 구별합니다.

injection에 취약 할 수 있습니다. 그리고 해석 언어에 의해 당신이 다른 방법으로 외부 데이터를 사용한다면, 처리 할 수 ​​있는지 확인 HTML (Cross-Site Scripting), SQL (SQL Injection), PHP (Code Injection)와 같은 언어, 쉘 명령 (Command Injection), etc.

을 의미 그것 제대로.

+0

CWE 링크 제공 용 +1 –