2013-05-19 4 views
3

PDO를 사용하면 SQL 인젝션이 사실상 불가능하다는 것을 알고 있습니다. 그러나 현재 웹 사이트의 모든 데이터베이스 관련 코드를 변경할 시간이 없습니다. (특히 PDO가 새로 나온 이래로 학습 곡선이 복잡해졌습니다.) 그래서 나는 mysql/php 함수가 PDO가하는 것과 동일한 보안을 줄 수 있는지 알고 싶다.PDO 보안 복제를위한 MySQL 및 PHP 픽스

이 두 항목으로 충분합니까? 반드시 모든 $ _GET과 $ _POST 데이터를 만들기

  1. (단지 숫자해야한다 등의 제품 ID와 같은, 그래서 is_numeric를 사용할 수 있습니다) 예상되는 유형입니다. 을 사용하십시오.

아니면 내가해야 할 일이 있습니까? 웹 사이트가있는 방식은 쿼리 문자열에 id=x을 기반으로하므로 데이터베이스에 갈 수 있습니다. 그리고 해킹 후에 데이터베이스에서 쿼리 문자열을 통해 데이터베이스로 이동할 수있는 모든 것이 cd etc/pwd과 같은 값으로 손상되었습니다.

+0

PDO가 그렇게 어려운 것은 아닙니다. 아마도 이것은 도움이 될 것입니다 : http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/ 정말로 시간이 없다면, 이 StackOverflow 게시물에 mysqli 관련 답변 : http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php?rq=1 – Gor

+4

준비 문. PDO가 진술서를 준비했을뿐만 아니라 – sectus

+0

BTW,이 특정 대답은 내가 무엇을 언급했다 : http://stackoverflow.com/a/60496/1298317 (@sectus 언급 한대로 준비된 문 ... 예) – Gor

답변

3

짧은 버전 : mysql 확장에서 mysqli extension으로 이동하고 매개 변수를 사용하는 쿼리를 준비된 문 (here is a quickstart guide)으로 바꿉니다.

하지만 장기적으로 지금 PDO를 배우는 데는 오래 걸리지 않을 것이므로 은 노력할 가치가있는입니다. 보조 노트로

:

내가 사용 PDO가 SQL 인젝션은 사실상 불가능하게 이해합니다.

사실이 아니므로 주사 가능한 쿼리를 PDO에 쓸 수 있습니다. 그것은 기존의 MySQL의 확장에서와 같이 PDO에서이 코드는 나쁜 (여기 하나의 가격에 두 가지 취약점 벡터!) :

$pdo_obj->query("SELECT password FROM users WHERE id = '".$_GET['id']."'"); 

PDO는 자신을 보호하고 사용하기 쉽도록 할 수있는 도구를 제공합니다. 항상 입력 내용의 유효성을 검사하고 필터링해야합니다. 그러나 준비된 문장을 사용하면 데이터베이스가 매개 변수가되어야 할 내용과 쿼리의 일부가 될 내용을 알 수 있습니다.

+0

자, PDO 사용으로 전환하고 있습니다. 그러나, 정말 내 응용 프로그램을 디버그하는 데 도움이되는 방법 중 하나는'echo "와 같은 개발 중에 내 쿼리를 반향 출력하는 것입니다. $ sql; '. PDO를 사용하면 더 이상 그 편리 성을 가질 수 없습니까? 준비된 진술을 어떻게 반향시킬 수 있습니까? – user961627