Checkmarx报告的ASP.Net MVC App Stored XSS漏洞

问题描述 投票:0回答:1

Checkmarx对代码进行了分析,并报告了以下问题。

方法 Load_Bank 在第**行从数据库中获取数据,为 Where 元素。然后,这个元素的值在没有经过适当过滤或编码的情况下流经代码,并最终在methods Bank_Read 在*行 SomeController.cs. 这可以使 存储的跨站点脚本 攻击。

internal IEnumerable<BankDTO> Load_Bank()
{
    using (var Container = new EBookletEntities())
    {
        var query = from r in Container.Gen_Bank.AsNoTracking()
                    where r.IsDeleted != true
                    select new Gen_BankDTO
                    {
                        Id = r.Id,
                        Name = r.Name
                    };
        return query.ToList<BankDTO>();
    }
}

以下是控制器代码

using (var bll = new BankBLL())
{
    var item = bll.Load_Bank();
    var model = item.Select(r => new BVM()
        {
            Id = r.Id,
            Name = HttpUtility.HtmlEncode(r.Name)
        }).ToList();

    return Json(model.ToDataSourceResult(request), "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet);

}

Checkmarx来源。

where r.IsDeleted != true 

目的地:

return Json(model.ToDataSourceResult(request), "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet);

不知道是真的存在Stored XSS问题还是Checkmarx报假?

如何解决Checkmarx的问题?

c# asp.net-mvc security xss checkmarx
1个回答
2
投票

这是不可利用的,因为响应类型是 application/json. 即使有一个有效的xss攻击的脚本标签,没有一个现代浏览器会在响应中执行一个带有 application/json 内容类型。

同时 Id 我猜是一个数字或uuid和 Name 是html编码的,你可以说这是为了深度防御,但实际上它只需要为json编码,它本身就是这样。

你可以在Checkmarx中标记为不可利用。

另外要注意的是,在GET请求中返回一个json数组仍然不被认为是好的做法,因为有一种老的攻击叫做 劫持. 然而,这在现代浏览器中已经无法利用了,所以我不会说它是脆弱的了。除了 在IE9中,不幸的是,它可能还在使用。

© www.soinside.com 2019 - 2024. All rights reserved.