2009-05-05 9 views
3

最近、PHPの電子メールフォームからデータをサニタイズするベストプラクティスと考えられるものはありますか?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("[email protected]", $subject, $message, $headers); 

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

ありがとうございます!

[EDIT]明確化、答えは今のところ、私はよく自分自身を説明していませんでしたことを示唆しているからです。

私は主にこのスクリプトを手に入れたスパムロボットに関心を持っているわけではありませんが、それを利用して誰でも不正な電子メールを[email protected]以外のアドレスに送信することになります。これにはボットが含まれているかもしれませんが、同様にCAPTCHAテストを打ち負かす人間かもしれません。

は私が探しているメール()メソッドで送信されたメールがハイジャックされていないことを確認しますPHPです。これはたぶん特定の文字を取り除く正規表​​現やフィルタなどです。 。おかげで再び[/ EDIT]

答えて

2

私はこれを行うだろう:

  • 使用CAPTCHAを。
  • 件名や本文にHTMLタグが含まれていると送信できません。注:私はそれらを取り除くとは言いませんでした。電子メールを送信せず、その理由をユーザーに伝えないでください。フィルタリングされたスパムメッセージを送信することはありません。ただそれを送信しないでください。
  • ハイまたはローの文字を取り除きます(filter_vars()がこれを行うことができます)。
  • メッセージを、たとえば4000文字(または選択した他の適切な制限)に制限します。
  • メッセージに現在のサイトを指していないURLが含まれていると、エラーが発生します。
  • おそらく、人間がメッセージを送信していることを確認するために、How do you stop scripters from slamming your website hundreds of times a second?の技術のいくつかを使用してください。
+0

>ベストプラクティス(私見)HTMLフォームから供給された電子メールアドレスに電子メールを送信することはありません。 この点を明確にすると、提供されたコードはサイト所有者以外の人に電子メールを送信しません。そのアドレスはPHP([email protected])にハードコードされています。私が保証したいのは、誰もそのスクリプトをハイジャックしないようにすることです。他の人に迷惑をかけるための古典的な\ ncc:[email protected]と同じです。 リンクありがとうございます! :c) – Wikiup

+0

申し訳ありませんがあなたは正しいです:私はそれを誤解しました。今修正されました。 – cletus

関連する問題