3

PHP メールフォームからのデータをサニタイズするための最近のベストプラクティスと考えられているものは何ですか?

私は現在、このようなものを使用しています...

$msg = $_POST['msg'];
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$name = $_POST['name'];

$subject = "Message from the MY_WEBSITE website e-mail system";
$message = "From: " . $name . "\n";
$message .= "Email: " . $email . "\n\n";
$message .= $msg;
$headers = "From: " . $email . "\r\n" .
           "Reply-To: " . $email . "\r\n" .
           "X-Mailer: PHP/" . phpversion();

$mailSuccess = mail("me@example.com", $subject, $message, $headers);

この方法で電子メール フィールドを単純にフィルタリングするだけで十分な保護でしょうか? スパマーから保護するために、スクリプトをより効果的に強化できますか?

前もって感謝します!

[編集]これまでの回答は、私が自分自身を十分に説明していないことを示唆しているため、明確化。

私は主にスパムボットがこのスクリプトを入手することには関心がありませんが、誰かがこのスクリプトを利用してme@example.com. これにはボットが含まれる可能性がありますが、人間が CAPTCHA テストを無効にする可能性もあります。

私が探しているのは、mail() メソッドによって送信された電子メールが乗っ取られないようにする PHP です。これはおそらく、特定の文字を単純に削除する正規表現またはフィルターなどです。ありがとうございました。[/編集]

4

1 に答える 1

2

私はこれをします:

  • CAPTCHA を使用します。
  • 件名または本文に HTML タグが含まれている場合、送信に失敗します。注: 私はそれらを取り除くとは言いませんでした。電子メールを送信せず、その理由をユーザーにエラー メッセージとして伝えてください。フィルタリングされたスパム メッセージを自分に送信しても意味がありません。送信しないでください。
  • 上位または下位の文字を取り除きます (filter_vars() でこれを実行できます)。
  • メッセージをたとえば 4000 文字 (または選択したその他の適切な制限) に制限します。
  • 現在のサイトを指していない URL がメッセージに含まれている場合は失敗します。
  • スクリプターが 1 秒間に何百回も Web サイトを非難するのをどのように阻止しますか? メッセージを送信する人間がいることを確認します。
于 2009-05-05T08:47:36.427 に答える