3

次のコードに潜在的なセキュリティ リスクがあるかどうか疑問に思っています。ユーザーがコメントを送信するたびにブログでこれを使用すると、テキストメッセージが送信されます。

mail('cellnumber@messaging.sprintpcs.com', '',
     "Comment posted by $name: $comment",
     "From: comments@example.com");

$nameとは、実際にはサニタイズ$commentされていないユーザー入力値です。ユーザーがここで悪意のあることを行う可能性はありますか? mail()のドキュメントはこれについて何も述べていませんが、ユーザーが入力した値を文字列に直接貼り付けるのは間違っていると感じています。本当のリスクはありますか、それとも私が妄想しているだけですか?

4

3 に答える 3

5

すべてのユーザー情報がメール本文に保持されている限り、インジェクションのリスクはありません。

ただし、ユーザーがメール ヘッダーに影響を与えるとすぐに、追加のヘッダーを挿入し、それを使用して任意の電子メール アドレスにスパムを送信したり、添付ファイルを含むまったく別のメッセージを含めたりすることができます。

ヘッダーに影響する部分の改行をチェックして、出てきたら拒否すれば十分です。SMTP 標準では CRLF を使用してヘッダー行を区切りますが、知る限り、多くの Unix ベースのサーバーでは LF のみを使用する必要があります (これらのシステムでは、LF がネイティブの行区切りであるため)。メールリレーラーは、さらに上流に送信するときにそれを変換します。

于 2010-01-02T21:36:23.977 に答える
3

名前の中の改行文字に注意してください。2 つの結果 (ええと.. 私の英語を許してください、2 つの改行が次々に) 改行は、SMTP で「ヘッダーの終わり」を意味します。

また、シーケンス `\n.\n' (ピリオドのみの空行) は、「メッセージの終わり」を意味します。

編集: はい、スパマーのリスクがあります! $name に実際に次のものが含まれている場合:

 someonesName
 CC: spamsubject@domain.com; anotherspamsubject@domain.com

(つまり、より多くのヘッダーを挿入するもの)?

EDIT2:「名前」と「コメント」の両方がメッセージの本文部分にあることに気づきませんでした。それではスパマーについての私の考えは有効ではありません。

于 2010-01-02T21:40:46.000 に答える
2

PHP は安全でないものでいっぱいですが、ここに多くのリスクがあるかどうかはわかりません。

確かに、コメントが長すぎると、メッセージ サイズの制限がいくらあってもオーバーフローする可能性があります。それはおそらくあなたを傷つけることはありません。

PHP の$XXX構文は文字列を展開しますが、それ以上の評価は行いXXXませんか? $XXXある種の のように機能した場合eval()、リモートでコードが実行される世界になりますが、そうではないと思います。

これが内部的に SMTP を実行している場合、.1 行の後に空行が続くとメールの終わりを示します。理論的には、攻撃者はそれに続いて一連の行にさらにテキストを追加し、メーラーを乗っ取って別のメッセージを誰かに送信することができます。そうしないと。それは、そもそも PHP がそのような文字列を認識してエスケープしない場合です。これは私が調べたいものです。

于 2010-01-02T21:38:12.753 に答える