2011-08-15 3 views
2

나는 php에서 sqlite로 들어가는 입력을 살균하는 방법을 찾아 내려고하고있다. 나는 mysql을 사용할 수 없다. 단순히 sqlite_escape_string을 사용하는 것만으로 충분합니까? 아니면 다른 것을해야합니까? 또한 sqlite2 만 사용할 수 있습니다.mysql없이 PHP 입력을 살균하는 방법

+0

http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – DrDol

답변

0

SQLite는 sqlite_escape_string()을 제공합니다. PHP 5에서만 사용할 수 있습니다.

그러나이 방법을 사용하면 주사에서 벗어날 수는 없습니다. 필수적인 조치는 입니다. 항상이 사용자 제공 입력의 유효성을 검사합니다. 메소드에 적용하기 전에 의존해야하지만, 실제로 작성하지 않았습니다.

2

SQL 삽입을 피하는 가장 좋은 방법은 매개 변수 쿼리를 사용하는 것입니다. 은 문자열 연결 또는 변수 보간으로 수동으로 SQL 문을 수동으로 어셈블하지 않습니다.

PHP 5 이상에서는 PDO를 사용할 수 있습니다. PDO는 SQLite 및 매개 변수 쿼리를 지원하는 다중 데이터베이스 추상화 계층입니다.

1

이스케이프 기능은 SQL 사투리가 사용하는 특수 문자 (주로 따옴표)가 이스케이프 처리되도록하여 삽입/업데이트 등의 작업을합니다. 모든 sqlite_escape_string은 작은 따옴표를 이스케이프 처리합니다.

그런 다음 누군가가 SQL 주입을 할 수 있다는 상당한 우려가 있습니다. v2를 사용하기 때문에 prepare 및 _bind() 함수를 사용할 수 없습니다.

SQLite를 사용하면 ';'로 구분 된 명령을 연결할 수 있습니다. 그래서 거기에 문제가 있습니다. 필자가 작성한 헬퍼 함수 나 sprintf를 사용하여 매개 변수를 신중하게 작성하고 int, float 및 string을 적절하게 입력하는지 확인하는 것이 좋습니다.

조심하고 싶은 항목을 "이스케이프"하는 고유 한 이스케이프 기능을 만들 수 있어야합니다 ... 가장 구체적인 것은 세미콜론을 사용하는 것입니다 ... ESCAPE 쿼리가 끝날 때 '\' 역 슬래시를 이스케이프 문자로 사용합니다.

그런 다음 누군가가 의도적으로 악성 콘텐츠 (XSS)를 삽입하는 문제가 있습니다. Grigor는 문자열에 htmlentities()를 사용하는 하나의 솔루션을 제공했습니다.

관련 문제