8

クックブックから読みました(4.2節)

CakePHPは、生のSQLの代わりにCakePHPのORMメソッド(find()やsave()など)と適切な配列表記(つまり、array('field' => $ value))を使用する場合、SQLインジェクションから既に保護されています。XSSに対するサニタイズの場合、一般に、生のHTMLを変更せずにデータベースに保存し、出力/表示時にサニタイズする方が適切です。

したがって、find()やsave()などのメソッドに制限する場合、SQLに対してユーザーデータを手動でサニタイズする必要はありませんか?特に、$ this->dataからではなく$_POSTから直接データを取得する場合、これは本当ですか?言い換えると、$ this-> dataを使用してfind()クエリを実行するとします。次に、CakePHPは、配列$ this-> dataを書き込むとき、またはfind()のクエリを書き込むときに、SQLに対してサニタイズしますか?

2番目の質問は、表示するデータをサニタイズすることです。Sanitize :: htmlはべき等ですか?それで、beforeSave()メソッドでそれを使用できますか、それとも、再度適用されて新しい結果が得られるため、2回目に保存すると壊れますか?

4

3 に答える 3

6

この質問について:

CakePHP は、配列 $this->data を書き込むとき、または find() のクエリを書き込むときに、SQL に対してサニタイズしますか?

Cakephp はコントローラで $this->data をサニタイズしません。Cake コードを確認すると、Dispatcher::parseParams() http://api13.cakephp.org/view_source/dispatcher/#line-244で確認できます。 $_POST はコントローラ データにコピーされ、値はサニタイズされません。

ただし、$_POST の使用はお勧めしません。フォーム ヘルパーを使用したときに獲得したケーキの魔法がすべて失われるからです。

于 2010-10-30T18:07:23.483 に答える
0

うわー - $_POST から直接データを取得する場合、今後のページでデータを公開する予定がある場合は、データを完全にサニタイズする必要があります。ログインに使用される選択クエリのレイアウトが原因で、単純な SQL インジェクションによって Cake 1.1 サイトが悪用される可能性があることが明らかになったため、約 2 年前に大きな恐怖を感じたことを覚えています。

ただし、多くのユーザーは意図的に SQL で使用される入力フィールドに古いルールを使用しました。

「SQL インジェクションから保護するには、ユーザー入力を SQL ステートメントに直接埋め込んではなりません。代わりに、ユーザー入力をエスケープする必要があります.....」

はい、それは別の問題でしたが、考え方は同じでした。自分でデータをスクラブすることによるパフォーマンスへの影響はほとんどありません。だからただそれをしてください。

于 2010-01-30T14:07:36.210 に答える
0

いいえ、影響はありません。で使用できますbefore_save()。カスタムクエリ関数、つまり独自のクエリを使用できる関数を使用する場合は、サニタイズが必要になります。

于 2010-09-08T08:24:00.387 に答える