16

ユーザーからの名前、メール、メッセージを受け入れるフォームがあります。名前、電子メール、メッセージの検証を行い、mail()関数を使用して送信するだけです。

$nameデータベースに, $emailandを入力した場合$message、SQL インジェクションのためにこのデータをエスケープします。または、ウェブページにエコーアウトする場合は、htmlspecialchars().

このデータを電子メールで送信する場合、どうすればよいですか? SQL インジェクションについて心配する必要がないことはわかっていますが、XSS についてはどうでしょうか。htmlspecialchars()これらの 3 つの変数にも使用する必要がありますか?

私は次のようにメールを送ります。

mail('admin@mywebsite.com', 'Contact From: '. $name, "$message", 'From: '. $email);

メール インジェクションについて読みましたが、理解できません。

これについて教えてください。

4

3 に答える 3

10

エスケープは、データが埋め込まれているコンテキストに完全に依存します。

HTML メールを送信していますか?次に、HTML コンテキストがhtmlspecialchars()あり、使用する必要があります。

プレーン テキスト メールを送信する場合、プレーン テキストのエスケープはありません。

唯一の脅威は、メール クライアントに何らかのバグがあり、プレーン テキストを実行可能なものとして解釈し、奇妙な名前とメール アドレスを取得すると動作することです。

ただし、これはメールの内容にのみ適用され、実際のヘッダーには適用されません。

カスタム メール ヘッダーを使用していますFrom。これを使用しないでください。Fromスパムフィルターで使用されます。私が自分のメール アドレスを入力し、あなたが でこのメールを送信しているFrom: my@mail場合、あなたは私自身の電子メール サーバーになりすましていることになります。スパムはこれを使用して、実際の送信元を隠し、苦情やエラー フィードバックをそのメール アドレスの背後にいる不幸な人物にリダイレクトしていました。このため、今日、そのような悪用を防ぐメカニズムがあります。ですから、私がこのメールを送信しているふりをしないでください。

返信ボタンをクリックするだけで返信できるようにしたい場合は、Reply-toヘッダーを使用しますが、常に を使用してFrom: dont-answer@YOURWEBSITE.exampleください。

さらに、これらのカスタム ヘッダーは悪いことへの入り口です。メールアドレスのみを追加していることを確認してください。改行文字を追加しないでください。これらは、メールサーバーに新しいヘッダーが来ると思わせ、これがメールヘッダーインジェクションにつながる可能性があります。

于 2013-06-14T19:01:02.913 に答える
0

問題は簡単です。一部のユーザーが他のユーザーに電子メールを送信できる場合、ほとんどの電子メール クライアントおよびすべての Web メール インターフェイスで解釈される HTML または JavaScript を使用して内容を書き換えることができます。彼は、別のサイトをロードする iFrame を挿入したり、PopUp スクリプトを挿入したりできます。

ブラウザでサニタイズするのと同じ方法で入力をサニタイズすることが最も重要です。

于 2013-06-14T19:00:24.943 に答える