2011-08-11 4 views
1

CodeIgnighter의 데이터베이스 API에 의존하는 here과 같은 코드 작성기에서 모델을 작성하려고합니다. CodeIgnighter의 데이터베이스 API가 SQL 주입을 완전히 막는 지 여부에 대해서는 forum post을 읽었습니다. 나는 people suggest을 알기 때문에 SQL 삽입을 막는 가장 좋은 방법은 PDO Framework입니다. 그러나 PDO 프레임 워크를 사용하는 방법을 알고 있지만 준비된 문을 사용하여 모델에서 쿼리를 생성하는 방법을 알 수 없습니다. CodeIgnighter의 데이터베이스 API를 사용하여 SQL 인젝션을 저장해야합니까? 아니면 PDO 프레임 워크를 사용해야합니까?CodeIgnighter의 데이터베이스 라이브러리가 SQL 삽입을 방지하기에 충분합니까?

답변

3

내장 된 코드 점화기를 사용하면 모든 기능을 사용할 수 있습니다. 여기

이 더 설명 유래에 대한 링크입니다 :를 사용하여 쿼리를 parametized StackOverflow Question,

, 그리고 위의 SO 문제의 예를 따라, 당신은 SQL 주입으로부터 안전 할 것, 다른 사람을 많은이 없다 CI 모범 사례에 따라 좋은 코드를 작성하고 내장 된 모든 기능을 사용하면됩니다.

2

CI의 라이브러리는 SQL 주입에 대해 mysql_real_escape_string (또는 원하는 드라이버가 무엇이든간에)과 마찬가지로 적절합니다. 왜 이런거야? DB 라이브러리가 모든 입력에 대해이를 호출하기 때문입니다. 또한 모든 테이블 및 컬럼 이름을 적절히 이스케이프합니다. 또한 PDO를 사용한다는 것은 CI의 Active Record 구문을 다시 작성해야한다는 것을 의미합니다.

즉, PDO에는 많은 이점이 있습니다. 나는 보안이 사실상 그들 중 하나라고 생각하지 않는다.

3

CodeIgniter에 대해 많이 말할 수는 없지만 Doctrine을 예제로 사용합니다. 데이터베이스에서 사용자를 가져오고 싶다고합시다. ..

// Correct usage. $user value will be passed as bound parameter to PDO 
    $query->where('u.username = ?', $user); 

또는 동일

// Works fine but should not be used like this and can be exploited if $user was not sanitized/escaped 
    $query->where("u.username = '$user' "); 

도 일반 PDO에 적용됩니다 : 당신은 쿼리에 조건을 추가 할 수 있습니다.

답변 : 그것은 도움이 될 수 있지만 문서를 읽고 지침을 따라야합니다.

관련 문제