首页 文章

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

提问于
浏览
3

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

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

我可以只是HtmlEncode一切,但后来我们考虑"Company name"的输入,它可以合法地包含"&"符号,我不热衷于发送一条消息“ Father & Son Ltd.

2 回答

  • 0

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

    所以我想说你真的不需要担心这个问题 . 它将被视为电子邮件客户端中的漏洞,如果攻击者知道此类漏洞,他们就不会费心使用您的怪异客户端,因为他们可以通过发送电子邮件来准确地制作电子邮件 . 他们自己 .

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

  • 2

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

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

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

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

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

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

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

相关问题