wpdb-> insertの前にwpdb prepareを使用する必要がありますか?
wpdb-> insertを使用してワードプレステーブルに値を挿入する場合、データを挿入する前にデータを「クリーン」にする必要がありますか、それともこのメソッド(wpdb-> insert)がそれを行いますか?
wpdb-> insertの前にwpdb prepareを使用する必要がありますか?
wpdb-> insertを使用してワードプレステーブルに値を挿入する場合、データを挿入する前にデータを「クリーン」にする必要がありますか、それともこのメソッド(wpdb-> insert)がそれを行いますか?
回答:
以下は、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メソッドは使用しないと仮定しています。
とにかく...たぶん、最初の答えから物事は変わった。
$wpdb->insert()
、$ wpdb-> update() `または$wpdb->delete()
データはRAWである必要があります。例えば$wpdb->query()
、SQLステートメントを使用して入力として渡す状況では、信頼できないデータをエスケープする必要があります。
いいえ-wpdb insertまたはwpdb deleteを使用する場合、SQLインジェクションを防止する必要はありません。
次のリンクを参照してください。
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
insert
&update
それを必要としません。ただし、で使用する必要がありquery
ます。