###質問
WordPressでデータベースに接続する際に、SQLインジェクション攻撃を防ぐために提供されている関数は「保存、更新、置換」だけで、「取得」がないのはなぜでしょうか?
###「保存、更新、置換」は関数が用意されている
$wpdb->insert
$wpdb->update
$wpdb->replace
など「保存、更新、置換」は、引数に『値と型』を渡せば、サニタイズもprepareも勝手にやってくれますよね。
以下のように『$dataと$format』を渡せば安全に実行されます。
php
1$wpdb->insert( wp_table, $data, $format );
###「取得」は自分で書かないといけない
しかし
$wpdb->get_results
$wpdb->get_col
$wpdb->get_row
など「取得」に関するものたちは、引数が『$query』となっており、自分でサニタイズもprepareもしなければならないようです。
以下のように『prepareを使ったSQL文』を渡さないといけません。さらに値のエスケープも自分で書かないといけないようです。
php
1$wpdb->get_row( $wpdb->prepare("SELECT * FROM wp_table WHERE id = %d", esc_html($id)) );
なぜでしょうか。「取得」も『値と型』を渡すだけで安全にできてくれたっていいだろう、と思うのですが、なぜ「取得」の方はそうなっていないのでしょうか?
この仕様について妥当な理由が知りたいのですが、詳しい方いらっしゃいましたらお願い致します。
###補足
「妥当な理由」といいましたが、「必ずこうだ」というものではなく、「こうではないか」などの推測で十分うれしく思います。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/27 01:17