【发布时间】:2014-12-26 23:26:25
【问题描述】:
Fortify 告诉我,我遇到了一个严重问题,即 XSS 漏洞。
摘要: 跨站点脚本:反射(输入验证和表示,数据流)
FooController.cs 中的方法 DoFoo() 在第 112 行将未经验证的数据发送到 Web 浏览器,这可能导致浏览器执行恶意代码。
它不喜欢这个方法返回的东西
return new JsonResult
{
Data = new
{
NameChanged = nameChanged,
DatabaseUpdated = true,
HasOpenAccount = contact.HasOpenAccount
}
};
这三个值都是布尔值。最后一个 (contact.HasOpenAccount) 是一个可为空的布尔值。那是 Fortify 不喜欢的(我认为是因为 contact 是从 javascript 传入的对象)。
我搞砸了 HttpUtility.HtmlEncode,并将其添加到 HasOpenAccount 行会将 Fortify 问题从严重更改为中等(验证不佳)。
我可以忍受,但这似乎并不是一个真正的问题。可为空的布尔值如何容易受到恶意攻击?这是一种可能性,还是 Fortify 疯了?
更新:
我通过更改解决了这个问题
HasOpenAccount = contact.HasOpenAccount
到
HasOpenAccount = contact.HasOpenAccount ?? false
当它为空时返回假。这完全解决了 Fortify 问题。显然它不喜欢空值?我最初的问题仍然存在,这甚至是一个真正的问题吗?
【问题讨论】: