3

私は自分のカスタムテーブルを持っていて、リモートAPIから関連データを取得するためのプラグインをWordpress用に作成しています。私が格納する必要がある要素の1つは、データベース内のTEXTフィールドであるURLです。WordPressのMySQLデータベースにURLをサニタイズする

Wordpressプラグインで標準mysql_またはmysqli_の機能を使用しないと言った数多くのコメントがありますので、挿入する前にURLをエスケープするにはどうすればよいでしょうか? esc_url()を十分に使用していますか、それとも先にすべきことがありますか?

case "Create": 
    { 
     $tag = $_POST['product_tag']; 
     $name = $_POST['product_name']; 
     $asin = $_POST['product_id']; 

     $response = getPrice("com", $asin); 

     $result = $wpdb->insert($table_name, array(
      'tag' => $tag, 
      'name' => $name, 
      'asin' => $asin, 
      'price' => $response['price'], 
      'url' => esc_url($response['url']) 
     )); 

     if ($result !== FALSE) 
      echo "Successfully inserted new Amazon Product."; 
     else 
      echo "An Error occurred."; 

     break; 
    } 
+0

+1 @ tadmsnの答えです。また、http://php.net/manual/en/function.filter-var.phpとFILTER_VALIDATE_URLフィルタ – Vamsi

答えて

5

通常、そのままの状態でURLをデータベースに挿入するだけで、提示時のセキュリティ上の問題のみに関係します。これはもちろん、連想配列として送られたデータを使ってinsert関数を明示的に呼び出したところにいるように、あなたが正しくここで作業していることを前提としています。

本当のリスクは、人がWPDBをバイパスして物事を直接挿入し、文字列連結を使用して悪いことが多いことです。

あなたこれらの値を表示するべきコールesc_url。許可されたURLを変更したり、必要に応じてURLを変更したり、必要に応じてURLを変更したりする場合は、データベースにそのまま保存して、ケースバイケースで表示するように準備することをお勧めします。

+0

をご覧くださいありがとう、それは完璧な意味があります!私は、サニタイズは、エンドユーザーによって提供されたデータの関心事であると考えています。これはAmazon APIから直接来て挿入されるので、代わりに表示用にesc_urlを使用します。 –

+0

ユーザーデータの先頭と末尾の空白を切り取って保存しておき、保存しているどんなコンテキストでもエスケープするように、フィルタリングと事前処理を行います。MySQLは1つのアプローチCSVとJSONを使用します。 HTMLはちょうど別のコンテキストです。必要に応じて、そのコンテキストのメソッドを 'htmlspecialchars'のように使います。 WPDBを適切に使用していて、セキュリティ問題の99%をゲートから解決するのは良いことです。 API生成データで行う唯一のその他のことは、実際には空の文字列やエラーメッセージではなくURLであることを確認することです。 – tadman

関連する問題