0

これは私のコードです:

MailMessage m = new MailMessage(from, to, subject, body);
SmtpClient s = new SmtpClient("...");
s.Send(m);

subjectとのみbodyがユーザー入力です。

4

4 に答える 4

2

コードは問題ありませんが、「件名」と「本文」がどこから来ているかによって異なります。(ご指摘のとおり)ユーザーが提供する場合は、エンコードしていることを確認する必要があります(HttpServerUtility.HtmlEncode)

于 2012-07-09T15:40:20.730 に答える
1

私はこれを非常に迅速に調査するためにテスト プロジェクトを作成しようとしていますが、Reflector を見てドキュメントを読んだところ、Subject と Body は厳密に System.Strings として扱われています。必要に応じて、文字列のエンコーディングを明示的に設定します (MailMessage.BodyEncoding)。

このクラスの組み立て方に重大なバグがない限り、他の文字列よりもコード インジェクションの可能性が高くなることはありません。特に、BodyEncoding を UTF-8 などのプレーン テキストに明示的に設定した場合は特にそうです。

EDIT:代わりに、HTMLが本文の一部ではないことを本当に確認したい場合は、正規表現を使用できます

@"<[^>]*>" 

Regex.Replace(regex, string.empty) または Regex.Match を使用し、一致が見つかったことを示す戻り値をスローして、一連の山括弧内のものを素朴に取り除きます。

于 2012-07-09T15:47:19.383 に答える
1

次に、件名本文を検証する必要があります。

于 2012-07-09T15:38:37.437 に答える
0

@DavidHall が投稿したリンクから.NET MailMessage クラスはインジェクションセーフですか? 、@Slaks は、to/from が検証されていると述べていますが、本文の内容は検証されていません。そのため、件名と本文を検証する必要があります。

ユーザーに送信する前に、件名と本文を必ずエンコードしてください。ほとんどのシナリオでは、これで十分です。

于 2012-07-09T15:46:34.870 に答える