MongoDB 보안 주입 공격 요청

$_GET(또는 $_POST) 매개변수를 쿼리에 전달하는 경우 해당 매개변수가 먼저 문자열로 캐스트되는지 확인하십시오. 사용자는 GET 및 POST 요청에 연관 배열을 삽입할 수 있으며, 이는 원치 않는 $ 쿼리가 될 수 있습니다.

상당히 무해한 예: http://www.example.com?username=bob 요청으로 사용자 정보를 찾고 있다고 가정합니다. 애플리케이션은 $q = new \MongoDB\Driver\Query( [ 'username' => $_GET['username'] ]) 쿼리를 생성합니다.

누군가는 http://www.example.com?username[$ne]=foo를 가져와서 이것을 전복시킬 수 있습니다. PHP는 마법처럼 연관 배열로 변환하여 쿼리를 $q = new \MongoDB\Driver\Query( [ 'username' => [ '$ne' => 'foo' ] ] ) "foo"라는 이름이 아닌 모든 사용자(아마도 모든 사용자)를 반환합니다.

이것은 방어하기 매우 쉬운 공격입니다. $_GET 및 $_POST 매개변수를 데이터베이스로 보내기 전에 예상한 유형인지 확인하십시오. PHP에는 이를 지원하는 filter_var() 함수가 있습니다.

이러한 유형의 공격은 업데이트, upserts, 삭제 및 findAndModify 명령을 포함하여 문서를 찾는 모든 데이터베이스 상호 작용에 사용할 수 있습니다.

MongoDB의 SQL 삽입과 같은 문제에 대한 자세한 내용은 » 기본 문서를 참조하세요.