2

次のコードがあります。

<?php

    $email_from = "oshirowanen@localhost.com";
    $email_to = $_POST["referred_email"];
    $email_subject = 'test subject here';
    $email_message = $_POST["referred_message"];

    // create email headers
    $headers = 'From: '. $email_from ."\r\n".
    'Reply-To: '. $email_from ."\r\n" .
    'X-Mailer: PHP/' . phpversion();

    if (filter_var($email_to, FILTER_VALIDATE_EMAIL)) {
        $result = mail($email_to, $email_subject, $email_message, $headers); 
        echo 'Mail accepted for delivery ';
    } else {
        echo 'Mail could not be sent ';
    }

?>

ユーザーによる悪意のあるアクションを防ぐために、とにかく POST 値のいずれかをエスケープする必要がありますか? はいの場合、どのエスケープ方法を使用する必要がありますか? 魔法の引用?

PHP 5.x を使用しています。

4

5 に答える 5

1

コードからのすべての出力は、適切な方法でエスケープまたはサニタイズする必要があります。これには、電子メールとして送信される出力が含まれます。

メールヘッダーの作成に関しては、メールが任意のアドレスに任意の内容で送信される可能性があるインジェクション攻撃から身を守るために、細心の注意を払う必要があります。

最終的には、電子メール アドレスが有効で、改行文字などが含まれていないことを確認する必要があります。現在のFILTER_VALIDATE_EMAILコードは、これを処理するための適切な出発点です。

しかし現状では、あなたのプログラムは基本的に、ユーザーが好きなコンテンツを好きな受信者に送信できるようにしています。ハードコーディングされた部分は「送信元」アドレスだけです。これは、スパムの送信に使用するためのオープンな招待状のように聞こえます。

これがあなたの実際のコードである場合は、それが何をしているのかを再考することをお勧めします!

それが完了したら、phpMailer クラスのコピーをダウンロードし、それを組み込み関数ではなく PHP でメールを送信するために使用することをお勧めしmail()ます。はるかに使いやすく、より多くの機能があり、最も重要なことは、すべての検証、サニタイズ、およびエスケープを行うため、もう心配する必要はありません.

それが役立つことを願っています。

于 2013-08-23T08:37:00.623 に答える
1

はい、それらすべてをエスケープするか、少なくとも検証する必要があります。

たとえば、email_to何千ものアドレスを含めることができます-これはユースケースでは問題ないかもしれませんが、私はそれを疑っています.

また、POST パラメーターはメール ヘッダーに入ります。これは危険な操作です。メール サーバーを操作して、予想とはまったく異なることを実行できるからです。

于 2013-08-23T08:13:22.030 に答える
0

まず、ほとんどの人は「逃げる」という言葉の意味を混同しています。

彼らはそれをある種の「データの性質や宛先に関係なく、データを魔法のように安全にする」と考えています。ほとんどの場合、いくつかの文字を他の文字に追加する形で考慮されます.

もちろん、そのようなエスケープは存在しません。

実際には、データの宛先の性質に応じて、データをフォーマットまたは検証する必要があります。また、「エスケープ」は、そのようなフォーマットの一部にすぎないか、まったく使用されない可能性があります。

この特定のケースでは、データがメール ヘッダーメール本文に追加されます。

ヘッダーはメイン インジェクションが発生しやすいため、改行が含まれていないことを確認する必要があります。あなたは正しい電子メールをチェックしています。
件名をハードコーディングしている限り、明らかに検証は必要ありません。ただし、フォームから取得した場合は、同様に検証する必要があります。改行が含まれていないことを確認してください。

プレーン テキスト メッセージを送信している限り、メール本文は安全と見なされます。

したがって、コードは現時点では安全に見えます。

しかし、このようなオープン アドレスのメール フォームのアイデアそのものが、スパム ゲートとして使用される可能性があります。

于 2013-08-23T08:29:06.640 に答える
0

ユーザーから取得したものはすべてエスケープします。それは何でもかまいません。

于 2013-08-23T08:12:10.517 に答える
-1

原因になりEmail Injectionます。次のドキュメントを読む必要があります。

http://www.phpsecure.info/v2/article/MailHeadersInject.en.php

于 2013-08-23T08:21:57.033 に答える