2011-01-29 8 views
10

カスタムのユーザー入力(アドレス、件名、メッセージなど)を受け入れる連絡フォームがある場合、セキュリティ上の影響と注意事項は何ですか?PHPのmail():注意すべき潜在的な問題は何ですか?

少なくとも、filter_var()または同等のものを使用して、ユーザーの電子メールアドレスを検証する必要があります。私が読んだことから、これはまた、追加のヘッダーがスクリプトに注入されるのを防ぐはずです。

件名とメッセージの内容はどうですか?これらの畑には衛生設備が必要ですか?私は電子メールクライアントがスクリプトが自動的に実行されないようにするだろうと考えています.HTMLタグのようなものについては特に心配していません。(誰かが手作業で電子メールのスタイルを設定する時間を費やしたいのであれば、それは特権です。それを見ている:P)。衛生管理の場合は、あまりにも邪魔にならないようにする(つまり、メールの性質を同じに保つ)ことが最良の方法ですか?

+0

[PHPのmail()関数を使用しないでください。](http://stackoverflow.com/questions/4565066/why-shouldnt-i-use-phps-mail-function) –

+2

@Rafe本当に私は思っていません。オペレーターは衛生事務所に具体的に質問していますが、偽装者はそれに対処していません。 –

+0

そのスレッドは私の関心を引っ張ってくれました。私はmail()関数を使う必要があることを今までに知りませんでした。 :P – Illianthe

答えて

4

人が体以外の部分に改行を挿入できないようにします。さらに、受信者を静的にし、決して通過させないようにします。隠しフォームフィールドを使用します。しかし、このようなフィールドを追加することは悪い考えではありません。予想される値に設定されていない場合はIPをブロックしてください。そうすれば、クライアントはおそらくスパムボットです。

+0

+1非常に良いアドバイス – alex

+0

あなたと被験者のフィールドでlinebreaksが危険ですか?参考資料はありますか? – user1318499

+0

改行は今日のところスペースに変換されますが、そうではない5.1.2の前に変換されます。とにかく、誰かがヘッダーを挿入すると、彼はおそらくスパマーです。あなたはこれを検出したいので、電子メールの正当な受信者であればスパムさえしません。 – ThiefMaster

7

あなたは四番目の引数を使用している場合は、このような何かをやっている場合は、オプションのヘッダは、余分なヘッダの挿入のために見て...

mail($to, $subject, $message, 'From: $email'); 

$emailは、ユーザの入力から来て、サニタイズされていない場合、ユーザーが何かのような...

\n\rCC:[email protected]

に入ることができるあなたは\n\rをフィルタリング、またはを検証することでこれを避けることができますはfilter_var($email, FILTER_VALIDATE_EMAIL)機能を使用しています。

+0

しかし、このような悪夢はあまり知られていないので、すでにそのようなことを考えていた図書館に世話をするのはずっと安全です。 – DGM