清理用于输入电子邮件的用户输入

我正在考虑从面向Internet的ASP.NET MVC5网站收集的用户提供的输入的xss消毒。 在将这些输入提交回浏览器时对这些输入进行消毒处理是有充分文件记录的。 但是,在构建包含用户提供的值的电子邮件的环境中,我还没有找到如何最好地处理消毒的信誉指南。

默认情况下,我将发送纯文本消息,这表明我不需要对这些值进行HTML编码。 但是,我担心现代邮件客户端会尝试呈现HTML格式的任何HTML格式。

我可以只用HtmlEncode编码所有内容,但接下来我们会考虑“公司名称”的输入,它可以非常合理地包含“&”符号,而且我并不热衷于发送“ Father & Son Ltd. ”的消息。


因此,XSS可能存在于电子邮件中,并且在过去发生过,但它被认为是电子邮件客户端中的漏洞,与发件人无关。 它几乎只发生在基于网络的电子邮件(如Gmail)而不是像Outlook一样。 电子邮件客户端通常不会(也不应该)从电子邮件(特别是桌面客户端)运行脚本。

所以我会说你并不需要担心这个问题。 这将被视为电子邮件客户端中的一个漏洞,如果攻击者知道这样的漏洞,他们就不会打扰您使用您的奇怪客户端,因为他们可以通过发送邮件来准确制作电子邮件他们自己。

我只是从安全角度回答,如果你关心的是包括styles / links /等客户端,那么这是一个不同的问题。 我会考虑任何电子邮件客户端试图呈现明文电子邮件,因为HTML已被破坏,而不是您应该担心的事情。


当您发送电子邮件时,您可以指定它是纯文本还是HTML电子邮件。

MailMessage mail = new MailMessage("you@yourcompany.com", "user@hotmail.com");
mail.IsBodyHtml = false;
...

这会添加一个标题,指示电子邮件客户端如何显示电子邮件内容。 现代电子邮件客户端将尊重这一设置

因此,如果您要发送纯文本电子邮件,请不要做任何事情来转义HTML值。

如果您要发送HTML电子邮件,则需要对任何用户提供的值进行HTML编码。 这不是安全问题,而是正确性问题:如果您的用户输入"Bruce Lee<Chuck Norris" ,即使它不是恶意的,您也不希望在此之后的电子邮件的其余部分被解释为一个巨大的HTML标签,使其对用户不可见。

如果你最终发送一个HTML体的电子邮件,你不会希望整个模板是纯文本的。 您可能需要考虑使用Razor模板,该模板将为您提供更好的工具支持来构建电子邮件的HTML,并且默认情况下会使基于模型的值为HTML编码:

@model WelcomEmailModel

<p>Dear @Model.CompanyName,</p>

<p>...
链接地址: http://www.djcxy.com/p/21653.html

上一篇: Sanitize user inputs destined for email

下一篇: PHP: PDO (SQLite) user input