私は自分のサイトにPHPによるHTMLの連絡フォームを持っています。現在私はPHP mail()関数を使用しています。そのため、email header injection attacksを避けるために、多くのユーザー入力の検証を行う必要があります。私は安全だと思いますが、おそらく何か忘れてしまいました。私は確固たるPHPメールライブラリに移行したいと思っています。私が選択したライブラリはSwiftmailerです。Swiftmailerを使用してPHP駆動のHTMLコンタクトフォームを安全にする方法は?
今私はではSwiftMailerは以下に取り組むかどうかを確認したい:
- は削除または送信者名に
<
と>
文字をエスケープ。 - 送信者名から改行(
\n
、\r\n
...)を削除します。 - 電子メールの件名から改行を削除またはエスケープします。
- メッセージ本文(メールの内容)の改行を正規化します。 PHPドキュメントによると、内容には
\n
、メールヘッダのセパレータには\r\n
を使用する必要があります。
PS:私はここで試しているので、私は成功していない私の質問をSwiftmailerチームに連絡しようとしました。
編集:
私はではSwiftMailerでいくつかのテストケースを行なったし、これは私がこれまでに見つけたものです:
- あなたは、送信者の名前で
<
または>
を持っている場合は、あなたが得ますa 配送不能メールエラーメール。これはメールサーバーのDOS attackに多少なりとも(多分私は間違っています)。これは正常ですか? - 改行がエスケープされ、注入攻撃が失敗します。
- 改行がエスケープされ、注入攻撃が失敗します。
- テスト済みですが、私はSwiftmailerが何をしているかを見ることができません。だから私はまだここで暗闇の中にいる。
誰かが#1と#4を明確にすることはできますか?正常な動作であるかどうかはわかりません。
あなたは常に、コードに目を通すことができます...結局のところ、Swiftmailerは単なるPHPスクリプトです。あなたがこの脆弱性を否定するなら、外部のライブラリをどうにか監査したいと思うでしょう。 –
'リクエストデータの内容を取り除かずにヘッダインジェクション攻撃から保護する'(ホームページから)、コードをざっとスキャンして、有効ではないものを渡すと、静かな受け入れではなく例外が発生すると思います。 – hakre
\ nと\ rを任意のユーザが提出したヘッダとwordwrap($ message、70)から取り除く限り、あなたは大丈夫でしょう。送信者名から< and >を取り除くとどうなりますか?私はこれらの文字があなたにどのようなタイプのハックを開いているか知ることに非常に興味があります。どんな情報でも大歓迎です。 – dqhendricks