wpdb-> insert:SQLインジェクションに対して準備する必要がありますか?


14

wpdb-> insertの前にwpdb prepareを使用する必要がありますか?

wpdb-> insertを使用してワードプレステーブルに値を挿入する場合、データを挿入する前にデータを「クリーン」にする必要がありますか、それともこのメソッド(wpdb-> insert)がそれを行いますか?

回答:


21

いいえ、データを準備またはエスケープしないでください。これはwpdbクラスによって行われます。

wpdbクラス参照

データ

(配列)挿入するデータ(列=>値のペア)。$ data列と$ data値は両方とも「生」でなければなりません(どちらもSQLエスケープされるべきではありません)。

ただし、insertメソッドを使用するのではなく、独自のSQLを記述している場合は、はい、使用してエスケープする必要がありますprepare


8
メモを追加するには:両方insertupdateそれを必要としません。ただし、で使用する必要がありqueryます。
カイザー

1

以下は、wpdbクラスの警告です。

https://codex.wordpress.org/Class_Reference/wpdb

警告

このクラスの一部の関数は、入力としてSQLステートメントを受け取ります。SQLインジェクション攻撃を防ぐには、SQLクエリに組み込むすべての信頼できない値をSQLエスケープする必要があります。ドキュメントをチェックして、使用する予定の関数がSQLをエスケープするか、事前にエスケープされることを期待しているかどうかを確認してください。

だから私はこれを読みます-wpdbクラスは自動的にデータを準備したりエスケープしたりしません。

コード内のデータソースを100%信頼できない場合は、prepare class(?)を使用することをお勧めします。

prepareクラスを使用すると、prepareクラスを適切に使用せずに修正されるとは思わないでください。私はこれにかなり慣れていないので、私が正しくない場合は、返信として修正を投稿してください。

$ wpdb-> prepare( "SELECT * FROMテーブルWHERE ID =%d AND name =%s"、$ id、$ name);

上記のステートメントには、2つの追加属性があります。1つはID用、もう1つは名前用です。私が読む限り、それぞれはクエリ内のアイテムの数に順番に対応しています。また、%s =文字列、%d =整数、および%f = floatです。

また、私の読書から、あなたが余分な属性を入れなければ、prepareは実際には何もしません。警告が表示されますが、これをオフにするとおそらくわからないでしょう。

以下は、クラス参照自体からの例で、下のINSERTに準備クラスを追加しています。

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

$ wpdb-> query($ wpdb-> prepare( "INSERT INTO $ wpdb-> postmeta(post_id、meta_key、meta_value)VALUES(%d、%s、%s)"、array(10、$ metakey、$ metavalue) ));

私の懸念は、「誰も」が参照している同じページによると、投票された答えが間違っていることです。私はあなたがprepare()を使用すると仮定していますが、他の標準的なエスケープのPHPメソッドは使用しないと仮定しています。

とにかく...たぶん、最初の答えから物事は変わった。


うーん、これはより多くの答えよりも質問のように聞こえる
マーク・Kaplun

受け入れられた答えは正しいです。のような関数を使用する場合$wpdb->insert()、$ wpdb-> update() `または$wpdb->delete()データはRAWである必要があります。例えば$wpdb->query()、SQLステートメントを使用して入力として渡す状況では、信頼できないデータをエスケープする必要があります。
nmr

nmr、私は今理解していると思います。明確にするために...私の正気のために...あなたが例として使用したのは、「クエリメソッド」を使用して使用した例ではなく「挿入メソッドと削除メソッド」です...(%wpdb ->クエリ)。回答を削除しますか?またはそれを残しますか?
フェリキシス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.