0

这是我的代码:

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

只有subjectbody是用户输入。

4

4 回答 4

2

代码很好,但这取决于“主题”和“正文”的来源。如果(如您所述)它们是用户提供的,则要确保对其进行编码(HttpServerUtility.HtmlEncode)

于 2012-07-09T15:40:20.730 回答
1

然后您应该验证主题正文

于 2012-07-09T15:38:37.437 回答
1

我正在尝试编写一个测试项目来快速调查这个问题,但是从我对 Reflector 的查看和对文档的阅读来看,主题和正文被严格视为 System.Strings - 这是欢迎你的地步如果需要,显式设置字符串的编码(MailMessage.BodyEncoding)。

除非这个类的组合方式存在重大错误,否则代码注入的可能性不应该比任何其他字符串更大;特别是如果您明确地将 BodyEncoding 设置为某种纯文本方式,例如 UTF-8。

编辑:或者,如果您真的想确保 HTML 不是正文的一部分,您可以使用正则表达式

@"<[^>]*>" 

用 Regex.Replace(regex, string.empty) 或 Regex.Match 天真地去除一堆尖括号内的任何内容,并抛出一个表示找到匹配项的返回值。

于 2012-07-09T15:47:19.383 回答
0

从@DavidHall 发布的链接Is .NET MailMessage class injection-safe? , @Slaks 提到 to/from 已验证,但您的正文内容未验证。因此,您需要验证主题和正文。

确保在将主题和正文发送给用户之前对其进行编码;在大多数情况下,这应该足以应付。

于 2012-07-09T15:46:34.870 回答