0

このコードを使用して、メールアドレスを検索キーワードとして返し、フォームで検索された場合に検索結果を取得しようとしています。しかし、キーワードは us​​er%40domain.com としてブラウザーに投稿されます。データベースmysqlクエリがデータベースでそれを見つけることができるように、user@domain.comとして登録する必要があります。ここにコードがありますが、動作しません。

   if (isset($_GET['search']) && tep_not_null($_GET['search'])) {
      $keywords = tep_db_input(tep_db_prepare_input($_GET['search']));
      $search = "where c.customers_lastname like '%" . $keywords . "%' or c.customers_email_address like '%" . urlencode($keywords) . "%'";
    }
4

2 に答える 2

2

%40 は @ に相当します。を使用するため、変換されますurlencode()。ページに表示する前に元に戻したい場合は、逆に を使用しますurldecode()

お役に立てれば!

于 2012-07-17T02:59:27.543 に答える
0

JohnTurdPileの両方に重要な答えがあります-使用-しかし、重要なurldecode()ポイントを見逃しています-ユーザーからの直接の入力に対してすべての入力のサニタイズを行っています。このルーチンで URL デコードを提供する場合は、入力のデコード後に入力サニタイズを実行する必要があります。そうしないと、入力が正しくサニタイズされてから URL デコードされると、SQL インジェクション攻撃が発生する可能性があります。

PDOに切り替えて、入力のサニタイズについて考える必要がないようにします。パラメーター化されたステートメントを正しく使用するだけで、インジェクション攻撃に対して脆弱なプログラムを作成する必要がなくなります。

于 2012-07-17T03:03:45.770 に答える