清理发往电子邮件的用户输入

时间:2015-10-03 18:02:47

标签: c# asp.net-mvc security xss

我正在考虑从面向Internet的ASP.NET MVC5网站收集的用户提供的输入的xss清理。在浏览器中呈现这些输入时对其进行消毒已得到充分记录并可以满足。但是,在构建包含用户提供的值的电子邮件的上下文中,我没有找到有关如何最好地处理清理的声誉指南。

默认情况下,我将发送建议的纯文本消息,我不需要对这些值进行HTML编码。但是,我担心现代邮件客户端会尝试将看起来的内容像HTML 一样呈现为 HTML。

我可以只是HtmlEncode一切,但是我们考虑“公司名称”的输入,它可以合理地包含“&”符号,我不热衷于发送一条显示“Father & Son Ltd.

的消息

2 个答案:

答案 0 :(得分:2)

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

所以我会说你真的不必担心这个问题。它将被视为电子邮件客户端中的漏洞,如果攻击者知道此类漏洞,他们就不会使用您的奇怪客户端,因为他们能够准确地制作电子邮件的方式。比如自己发送。

我只是从安全的角度回答,如果您关注的是客户端,包括样式/链接/等等,这是一个不同的问题。我会考虑任何电子邮件客户端尝试呈现纯文本电子邮件,因为HTML已被破坏,而不是您应该担心的事情。

答案 1 :(得分:0)

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

"Bruce Lee<Chuck Norris"

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

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

如果您要发送HTML电子邮件,则需要对任何用户提供的值进行HTML编码。这不是一个安全问题,而是一个正确性问题:如果您的用户输入@model WelcomEmailModel <p>Dear @Model.CompanyName,</p> <p>... ,即使它不是恶意的,您也不希望在此之后剩余的电子邮件被解释为一个巨大的HTML标签,使其对用户有效。

如果您最终发送的是HTML电子邮件,则您不希望整个模板采用纯文本格式。您可能需要考虑ol.geom.GeometryType,这将为您构建电子邮件的HTML提供更好的工具支持,并使默认情况下基于模型的值进行HTML编码:

{{1}}