如果我将用户输入解析为一个电子邮件地址,并转换成MailAddress类:
var mailString = Request.QueryString["mail"];
var mail = new MailAddress(mailString);
如果我稍后以任何方式输出MailAddress对象,是否仍有跨站脚本攻击的可能性?例如通过WebForms中的Literal控件:
litMessage.Text = "Your mail address is " + mail.Address;
即使我已经通过解析字符串来确保地址是有效的电子邮件地址,是否有必要对输出进行过滤?
据我所知,邮件地址的RFC非常复杂,因此我不确定.NET认为有效的邮件地址中是否可以隐藏跨站脚本。
编辑:
MSDN表示,>
和<
括号在电子邮件地址中是允许的:
如果您将地址置于角括号中,则地址参数可以包含显示名称和相关联的电子邮件地址。例如:"Tom Smith <tsmith@contoso.com>"
因此问题仍然存在:这是否足以防范XSS攻击,或者MailMessage
类是否会执行任何操作以转义危险部分。
MailAddress
类时不应该需要添加正则表达式过滤器。我在这里包含它是为了完整地开发一个净化器。话虽如此,在高安全性环境中,我们不喜欢信任专有/闭源代码,因为我们无法检查其漏洞。出于这个原因,我们编写自己的代码。至于通过MailMessage
进行攻击,我不知道是否存在任何攻击,但这并不意味着不可能,特别是如果您以作者未预料到的方式使用该类。 - Freedom_BenMailAddress
成功,他们很可能不会放弃,因为在地下黑市上它的价值非常高。我刚听说有一个针对Java 7的黑客攻击被以5万美元的价格出售。一旦被公开,它们就毫无价值了。 - Freedom_Ben