web-dev-qa-db-ja.com

データをサニタイズするための最良の方法は何ですか?

私はこれに関するいくつかのトピックを読みました、そして、異なる人々はベストプラクティスに関して異なる見解を持っています。

WordPressに関して、どのようにして最も安全な方法でデータベースにデータを書き込むのですか?

これは私が今使っているインサートの1つです。

$result = $wpdb->insert(
    $table_name , 
    array( 
        'arena'         => $galleryData['arena'],
        'year'          => substr( $galleryData['season'], 2 ),
        'copyright'     => $galleryData['copyright'],
        'description'   => $galleryData['description'],
        'path'          => $galleryData['path'],
        'fk_brand_id'   => $galleryData['brand']
    ), 
    array( '%s', '%d', '%s', '%s', '%s', '%d' )
);

データを挿入するもう1つの方法はこれを行うことです。

$sanitized_sql = $wpdb->prepare( "
    INSERT INTO my_plugin_table 
    SET 
        field1 = %1$d,
        field2 = %2$s,
        field3 = %3$s’,
        32, 
        'Aaron Brazell',
        'Washington, D.C'
" );
$wpdb->query( $sanitized_sql );

それでも wp_kses() または mysql_real_escape_string() を使用してデータをサニタイズする必要がありますか?

データベースにデータを安全に書き込むにはどの方法が良いかについて混乱しています。 Stack Overflowで役に立つ答えを見つけました

それでは、入力前にデータをサニタイズするべきですか、それともサニタイズしないべきですか?

7
Steven

消毒は既に行われていません。 mysql_real_escape_string が実行されたので、入力でHTMLをフィルタリングするのは悪い形式と考えられています。私は個人的にはちょっとした出力違反でそれをすることはDRYに違反すると思います。あなたがWordPressでやったことがあるならば、私はどこか他でどこかでそれを再びするであろうと非常に疑っています。

また、wpdb :: insertは基本的にはwpdb :: prepareのラッパーです。

1
Backie

安全にデータを格納する は、 安全なデータ とは異なることに注意してください。たとえば、JavaScriptコードはデータベースセキュリティの観点からはまったく無害ですが、フロントエンドの観点からは悪夢です。

単一の包括的なアプローチはありません、それが WordPressに大量の関連機能がある である理由です。

あなたは考慮する必要があります:

  1. データは何ですか。
  2. どこから来たのか。
  3. それはどのように使われるのでしょうか。
4
Rarst