2

私の質問は、ワードプレスの$wpdbメソッドについてです。たとえば、これらのメソッドを実行する前に:

$wpdb->query
$wpdb->get_results
$wpdb->get_var ...

入力をエスケープ/フィルタリングする必要がありますか?これはすべての方法で必要/推奨されますか、それとも一部の方法でのみ推奨されますか?

これは、たとえば、すべての違法な文字を処理するのに十分ですか(wordpress codexの例):

$wpdb->query( 
    $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE post_id = '13' AND meta_key = 'gargle'" ,$id, $key )
);

編集:

以下の回答に示されているように、実際、すべてのユーザー入力について、データベースに挿入する前にパラメーター値を確認する必要があります。セキュリティだけでなく、Webアプリの一般的なロジック(たとえば、フロントエンドで何かを解析する場合、データベースに含まれるデータが期待するものではない場合、そのデータでさえも、エンドユーザーにとって適切な結果にはなりません)セキュリティの観点からは疑わしいものではありません)。

そうは言っても、ワードプレスのための上記の準備メソッドは、SQLインジェクションの観点からセキュリティ上の懸念を保証して取り除くメソッドです。

4

1 に答える 1

3

ワードプレスのコーデックスページの例にエラーがあります。'13'と'gargle'の代わりに%dと%sを使用する必要があります。

$wpdb->query( 
$wpdb->prepare( 
    "DELETE FROM $wpdb->postmeta
     WHERE post_id = %d
    AND meta_key = %s
    ", $id, $key )
);

ただし、変数のコンテンツタイプを毎回確認する必要があります。タイプが正しいことを確認する必要があります。たとえば、「post_id」変数の内容が整数であることを確認します。

于 2012-05-13T22:45:15.813 に答える