2010-12-14 11 views
1

Kohanaは、ドキュメントのデータベース入力をサニタイズするためにmysql_real_escape_stringを使用すると述べています。しかし、フォームを通していくつかの基本的なクエリを試しながら、入力したのとまったく同じようにデータベースに入力されました。たとえば、Kohana 2.3.4 ORM SQLインジェクション保護

SELECT * FROM users WHERE username='admin' AND password='' OR ''='' 

は、表示されているとおりにmysqlデータに入力されます。私はデータベースの代わりにORMライブラリを使用してい

SELECT * FROM users WHERE username=\'admin\' AND password=\'\' OR \'\'=\'\' 

が、私は、彼らが一緒に仕事を知っている:私は見て期待していました。また、フォームからデータを収集するために、組み込み入力ライブラリ($ this-> input-post)を使用しています。私はセキュリティに関連するコントローラやライブラリを変更していません。

私はまだソースコードをコーディングしていませんが、Kohanaは文字列をエスケープしてからスラッシュを削除してからdbフィールドに入力しますか?私はこれが事実だと確信していますが、私は確信したいと思います。

おかげ

答えて

3

SQLクエリをエスケープするとき、アポストロフィが文字列区切り文字として解釈されないように、SQL構文と競合しないようにリテラルデータをエスケープします。 MySQLは、エスケープして格納する必要のあるデータを実際には必要とせずに、エスケープされていないアポストロフィなどを格納できます。エスケープされた形式でデータを格納するのは間違いでしょう。その結果、データを取得した後に再度エスケープする必要があります。

私はKohanaに精通していませんが、クエリを保存するように依頼しても正確に同じクエリを返すならば、入力が適切に処理されていることを確認できます。

+0

詳細な回答ありがとうございます – anthony

2

KohanaのORMは自動的にSQLインジェクションからあなたを守ります。

関連する問題