2013-06-29 4 views
0

내 sql wrapper로 zend_db_select 클래스를 사용하고 있습니다. 다음 insert 문이 보호되는지 알고 싶습니다. 나는 약간 따옴표 테이블에 행을 삽입하려고내 zend_db_select 삽입 문 보호

function createNew($message,$tags,$userid,$imgsrc){ 
    $data = array('message' => $message, 
         'tags' => $tags, 
         'imgsrc' => $imgsrc, 
         'createdtimestamp'=>new Zend_Db_Expr('NOW()'), 
         'userid' => $userid); 
    $this->dbo->insert('data', $data); 
    return $this->dbo->lastInsertId(); 
} 

(이것은 SQL 인젝션 등을 방지하기위한 메커니즘을 제공하는지 여부), 그리고 그것은 내가 너무 많이 걱정하고, \로 이스케이프 얻을 didnt가 또는 phpMyAdmin을 자동이 제거 않습니다 \ 쉽게 볼 수 있도록? 혼란스러워. 나는 어딘가에 zend_db_select가 그런 SQL injection stuffs를 제공한다고 읽었다.

감사합니다. 감사합니다

답변

2

예, 안전합니다. Zend DB는 prepared statements을 사용하므로 배열의 각 값은 적절한 메커니즘을 사용하여 자동으로 이스케이프됩니다.

(예 : phpMyAdmin과 같은 도구를 사용하여) 데이터베이스의 내용을 볼 경우 거기에서 이스케이프 된 따옴표를 보지 말아야합니다. 이것이 이스케이프 처리의 요점입니다. 문자열 O'Reilly을 삽입하면 DB에서 끝납니다.

편집 :이 쿼리를 고려해

INSERT INTO users (name) VALUES ('John O'Reilly') 

이 작동하지 않습니다와 SQL 구문 분석기는 컬럼 값의 끝으로 두 번째 '을 볼 수 있기 때문에, 당신에게 SQL 구문 오류를 줄 것이다, 다음 문자를 볼 때 질식합니다. 그래서 당신은 탈출은 해당 견적을 탈출해야합니다

INSERT INTO users (name) VALUES ('John O\'Reilly') 

백 슬래시가 (즉 열 값의 끝으로 취급하지 않습니다) 리터럴로 다음 아포스트로피 치료에 알려줍니다. 백 슬래시 자체는 데이터베이스에 삽입되지 않습니다.. This is an escape character입니다. 이는 컴퓨팅에서 일반적인 관행입니다.

+0

안녕하세요! 답장을 보내 주셔서 감사합니다! 우리가 도망친 따옴표를 절대 보지 말아야하는 이유를 언저드하지 말라. 왜 그것이 중요한가? 데이터를 이스케이프 처리하는 방법에 대한 요점은 우리 문자열이 db에서 \ '을 (를) 얻는 것입니다. 예를 들어 O'Reilly에 들어갔습니다. db가 O'Reilly로 표시되면 문자열이 이스케이프 처리되는 것을 어떻게 알 수 있습니까?이 시점에서 혼란 스럽습니다. – Slay

+0

예를 들어 답을 편집했습니다. 분명히 분명합니다. –

+0

ic! 난 그냥 깨달았 어 ... 그래서 SQL 인젝션은 잠재적으로 선택, 삭제 및 어디 조항과 함께 업데이 트에 대한 일이 일어날 수 있습니까? 삽입물에는 적용되지 않습니까? – Slay