1

Kohanaは、ドキュメント内のデータベース入力をサニタイズするためにmysql_real_escape_stringを使用していると述べています。ただし、フォームを介していくつかの基本的なクエリを試してみると、それらは私が入力したとおりにデータベースに入力されました。例えば:

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

表示されているとおりにそのmysqlデータに入力されます。私は見ることを期待していました:

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

データベースの代わりにORMライブラリを使用していますが、それらが連携して機能することはわかっています。また、組み込みの入力ライブラリ($ this-> input-post)を使用して、フォームからデータを収集しています。セキュリティに関連するコントローラやライブラリは変更していません。

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

ありがとう

4

2 に答える 2

3

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

私はKohanaに精通していませんが、クエリを保存するように要求した場合、入力が適切に処理され、まったく同じクエリが返されるので安心できます。

于 2010-12-14T17:52:18.823 に答える
1

Kohana ORMは、SQLインジェクションから自動的に保護します。

于 2010-12-14T17:51:02.753 に答える