0

ユーザーが特殊文字を入力して、DB に送信できるようにしたい。

入力を使用してテストしました: Dave & ' " *ですが、データベースには保存されません。上記のように特殊文字を使用せず、Daveのみを使用すると、問題なく保存されます。

私は2つのことを試しました:

<p class="clearfix">
                        <label for="name">name</label>
                        <input class="validate[required]" id="name" name="name" type="text" value="'.esc_attr($_POST['name']).'">
                    </p>  

<p class="clearfix">
                        <label for="name">name</label>
                        <input class="validate[required]" id="name" name="name" type="text" value="'.htmlspecialchars($_POST['name']).'">
                    </p>  

どちらも機能しません。

支払い後のデータベース挿入コード:

if(strpos($response['body'], 'VERIFIED') !== false && $_POST['payment_status'] == "Completed") {
    //Assign IPN Post Values to Local Variables
    $comboString = $_POST['txn_id'].$_POST['payment_date'];

    $data = explode('~',$_POST['custom']);

    $ipn_data = array(
        'name'      => mysql_real_escape_string($_POST['name']),
        'sale_date'     => $_POST['payment_date']
    );
    $ipn_format = array('%s','%s');
    if($ipn_business == $paypal_email) {

        $wpdb->insert($wpdb->prefix.'orderdata', $ipn_data, $ipn_format);
        $ipn_data['currency'] = $_POST['mc_currency'];
        $ipn_data['admin_field'] = $_POST['admin_field'];

        send_email($ipn_data);
    }

} else {
    exit("IPN Request Failure");
}
4

1 に答える 1

0

これには、次の 2 つの非常に単純なルールが適用されます。

  1. データベースへの挿入時にのみ、データベースへの挿入に対して文字列を安全にする
  2. 画面に表示される場合にのみ、文字列を安全に画面に表示できるようにします。

(XML への追加、URL/GET パラメータへの追加、電子メールへのデータの挿入などの同様のルール - それぞれに処理方法がありました。)

したがって、データベースに挿入するときは、PDO 準備済みステートメントまたは mysqli 準備済みステートメントを使用してください。これにより、データが安全になります。できない場合は、文字列を でラップしますmysql_real_escape_string()。データベースに入力される (したがって出力される) 内容は変更されません。安全に入力できるようにするだけです。

2 番目の例のように、画面に表示するときは、htmlentities()またはを使用しますmysqlspecialchars()。引用符の処理方法を知っている場合は mysqlspecialchars が最適ですが、不明な場合は htmlentities を使用してください。

そうこうしているうちに、あなたがメールを送っているのが見えました。電子メール ヘッダーに追加される値から改行と偽の境界を削除し、本文から偽の境界を削除してください (改行は問題ありません)。スパムを防ぐのは難しいため、電子メール用のスクリプトを使用することをお勧めします。

于 2012-11-16T02:59:03.477 に答える