2013-06-14 10 views
9

ユーザーからの名前、電子メール、およびメッセージを受け入れるフォームがあります。名前、電子メール、メッセージの検証を行い、mail()機能を使用して送信します。電子メールで送信する前にユーザー入力データをサニタイズする必要がありますか

$name,$emailおよび$messageをデータベースに入力していた場合は、このデータをSQLインジェクションでエスケープします。または、私がウェブページ上にそれをエコーし​​ていた場合は、htmlspecialchars()を使用します。

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

私はこのようなメールを送信:

mail('[email protected]', 'Contact From: '. $name, "$message", 'From: '. $email); 

私は、電子メールの注入について読んだが、私はそれを理解することはできません。

私にこれについてお知らせください。

+0

電子メールのスパムを停止するために複数のアドレスではないことを確認、それが特異にするために電子メールアドレスを検証する必要があります。 UseヘッダにFromヘッダを設定している場合は、yesを指定すると消毒が必要になります。 – andrewsi

+0

これも私が理解できないものです!私はこれに対する答えを見ることを楽しみにしています。 – pattyd

+0

メール( '[email protected]'、 '連絡先:'。$ name、 "$ message"、 "From: '。$ email); – user2471133

答えて

7

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

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

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

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

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

カスタムメールヘッダーFromを使用しています。これを使わないでください。 Fromはスパムフィルタで使用されます。メールアドレスを入力してFrom: [email protected]でこのメールを送信すると、自分のメールサーバーになりすましています。実際の送信元を隠し、そのメールアドレスの背後にある不幸な人に苦情やエラーフィードバックをリダイレクトするためにこれを使用するスパム。今日、このような虐待を防ぐ仕組みがあります。だから私はこのメールを送っているふりをしないでください。

返信ボタンをクリックして私に返信したい場合は、Reply-toヘッダーを使用しますが、常にFrom: [email protected]を使用してください。

さらに、これらのカスタムヘッダーは、悪いもののエントリポイントです。メールアドレスを追加していることを確認してください。改行文字を追加しないでください。これらは、メールサーバが新しいヘッダが来ていると思うようになり、メールヘッダの挿入につながる可能性があります。

+0

私は、電子メールがどこに行くかを除いて、ユーザーにすべてを入力させています。だから、ユーザは、名前、電子メール、メッセージフィールドにhtmlタグ、スクリプトタグなどを入力することができます – user2471133

0

問題は簡単です。もし誰かが他の誰かに電子メールを送ることができれば、ほとんどのEmail-ClientsやWebmailインターフェースで解釈されるHTMLやJavaScriptを使って内容を書き換えることができます。彼はiFrameを挿入して別のサイトを読み込んだり、PopUp Scriptを注入したりすることができました。

ブラウザのために入力をサニタイズするのが最も重要です。

+0

電子メールヘッダーにコンテンツにHTMLが含まれていると記述されている場合にのみ、HTMLが解釈されます。 こんにちはを含む平文メッセージを誰かに送信してみてください... – deceze

+0

私はそのようなユーザーの電子メールを傷つけるとは思わない?私はそれにhtmlspecialchars()を使用する場合? – user2471133

+0

プレーンテキストメールであっても、攻撃者は悪意のあるターゲットへのリンクを挿入するだけで、現代のすべてのクライアントはこれらを強調表示します...サニタイズとフィルタリングは重要です! – FloydThreepwood

3

あなたはそれはあなたがそれを使用しているかによって異なり

http://www.php.net/manual/en/filter.filters.validate.php

$email = "[email protected]"; 

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
    { 
    echo "email not valid"; // do not send 
    } 
else 
    { 
    echo "email valid"; // send 
    } 
+0

だから、$ nameと$ messageではなく$ emailフィールドを検証する必要がありますか? – user2471133

+0

@ user2471133電子メールvarは主要な部分ですが、名前とメッセージの@を[at]に変更することもできます。 $ message = str_replace( '[at]'、 '@'、$ message); ' – amigura

+0

あなたのためのいくつかの追加情報[link] [str_replace(' [at] '、' @ '、$ name) ] http://www.securephpwiki.com/index.php/Email_Injection [リンク] – amigura

関連する問題