7

私のサイトには PHP 駆動の HTML コンタクト フォームがあります。現在、PHP のmail()関数を使用しています。そのため、メール ヘッダー インジェクション攻撃を回避するために、多くのユーザー入力の検証を行う必要があります。私は安全だと思いますが、おそらく何かを忘れており、堅牢な PHP メール ライブラリに移行したいと考えています。私が選んだライブラリはSwiftmailerです。

ここで、Swiftmailer が次のアドレスに対応しているかどうかを確認したいと思います。

  1. 送信者名の<および文字を削除またはエスケープします。>
  2. 送信者名から改行 ( \n, \r\n...) を削除します。
  3. メールの件名から改行を削除またはエスケープします。
  4. メッセージ本文 (メールの内容) の改行を正規化します。PHP ドキュメントに従って、\nコンテンツ内で、および\r\n電子メール ヘッダー セパレーターとして使用する必要があります。

PS: Swiftmailer チームに問い合わせてみましたが、うまくいきませんでした。

編集:

私は Swiftmailer でいくつかのテストケースを行いましたが、これは私がこれまでに見つけたものです:

  1. 送信者名に<またはがあると、配信不能エラー メールが届きます。これは、メール サーバーへのDOS 攻撃につながる可能性があります (おそらく、私が間違っている可能性があります)。これは正常ですか?>
  2. 改行はエスケープされるため、インジェクション攻撃は失敗します。
  3. 改行はエスケープされるため、インジェクション攻撃は失敗します。
  4. テスト済みですが、Swiftmailer が何をするのかわかりません (何かをする場合)。だから私はまだここで暗闇の中にいます。

誰かが私のために#1と#4を明確にすることができますか? 正常な動作かどうかはわかりません...

4

1 に答える 1

1

編集:この回答は廃止されている可能性があります。これを書いている時点では、SwiftMailer ライブラリにいくつかの問題がありました。この時点で、すべてが で正常に動作してSwiftMailerおり、より多くの機能を提供する優れたライブラリであると考えられていますPHPMailer

phpmailer を使用することをお勧めします。これは、私が今まで使用した中で最も安定したメーリング ライブラリの 1 つです。動作するはずのコード例を次に示します。

include("./phpmailer/class.phpmailer.php");
$mail = new PHPMailer(false); // the true param means it will throw exceptions on errors, which we need to catch
$mail->IsSMTP();
$mail->Host = "YourDomainName.com";
$mail->SMTPDebug = 2;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Host = "YourSMTPMailServer.com";
$mail->Port = 587;
$mail->Username = "your-auth-user@yoursmtpmailsercer.com";
$mail->Password = "password"; // GMAIL password
$mail->AddAddress("sendToThis@email.com", '<< >> ! " Receiver Name');
$mail->SetFrom('sendFROMthis@email.com', '<< >> ! " Sender Name');
$mail->Subject = "A testing subject";
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
$mail->MsgHTML('This is my <b>html</b> testing email, sent '.time());
$mail->Send();

メール サーバーに接続するようにこれを構成する必要がありますが、動作するはずです。Phpmailer は、これまで試したすべてのことを回避します。私がチェックしているのは「sendToThis@email.com」だけです。私はこのコードでそれを行います:

$email = "sendToThis@email.com";
$email = filter_var(filter_var($email,FILTER_SANITIZE_EMAIL),FILTER_VALIDATE_EMAIL);

if($email){
    echo "This email is valid!";
} else {
    echo "This email is INVALID!";
}

これが役立つことを願っています:)

于 2011-07-07T16:07:02.590 に答える