2013-10-17 3 views
-1

내가 PDO까지 전환에 도움이 튜토리얼에서 찾고 있었어요 : http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_DevelopersPDO - 사용 준비된 문

그러나, 내가 찾을 수없는 한 가지가있다. 내가 부탁 해요하는 경우이다 본질적으로

$name = $_POST['name']; 
$stmt = $db->prepare("INSERT INTO table(name) VALUES(?)"); 
$stmt->execute(array($name)); 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

:

내가 PDO의 PHP 코드는 다음과 같을 것이다 이름 "사용자"그래서

와 텍스트 입력 양식을 말해봐 이것은 안전합니다. PDO가 mysql_real과 다른 점은 mysql_real_escape_string을 더 이상 사용하지 않는다는 것입니다.하지만 악의적 인 데이터가 데이터베이스에 저장되지 않도록하려면이 작업을 수행해야합니까?

+1

그래서 PDO가 구상 된 것입니다. –

+1

값은 당신을 위해 이스케이프 처리됩니다 – Ibu

+0

이전 mysql 절차 스타일 함수 대신 pdo를 사용하는 것이 훨씬 안전합니다. pdo 클래스는 문자열을 이스케이프 처리하고 위생적으로 처리합니다. –

답변

1

내가 아는 한, SQL을 PDO에 주입하는 것은 사실상 불가능합니다 (또는 적어도 그렇게 할 방법을 들어 보지 못했습니다).

mysql_real_escape를 사용하는 경우에도 함수에 알 수없는 버그가 있거나 few cases where the function fails이라는 위험이 있습니다. PDO가 작동하는 방식은 먼저 '준비'하고, 수행 할 작업 목록을 만들고, 작업과 작업을 수행합니다. 그러면 입력 한 내용을 가져옵니다. SQL 주입은

$query = "INSERT INTO table(name) VALUES($name)"; 

이 취약, 간단히 말해 쿼리

에 그들의 방법을 만들어 작동합니다. 비록 당신이 그것을 벗어나더라도, 당신은 완전히 안전하지 않을 수도 있습니다.

준비하면 $ name을 고려하지 않습니다. 따라서 해커가 쿼리에 참여할 수있는 방법은 없습니다. 이미 호출 된 연산을 계산 한 후에 만 ​​모든 작업을 처리하므로 해커가 어떤 방식 으로든 쿼리를 수정할 수 없습니다.

+0

downvote에 감사드립니다. 또한 설명하는 마음? ... –

+1

[이 질문에 대한 답변을 읽어보십시오 (http://stackoverflow.com/q/5741187/603003). mysql_real_escape_string()은 모든 실수에서 정말로 당신을 구해주지는 않는다! – ComFreek

+0

@ComFreek : 두 번째 단락을 읽으면 @aayush가 mysql_real_escape_string이 모든 실수에서 나를 구할 것이라고 말하지 않을 것입니다. –