首页 > 解决方案 > Kendo DataSourceRequest 对象中的反射 XSS

问题描述

我们在用于 Kendo 网格数据填充的控制器中执行以下操作

public ActionResult GetCompanyDetails([DataSourceRequest] DataSourceRequest request)
{
   var companyDetails = BusinessLayer.GetCompaniesDetail();
   return Json(companyDetails.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

在运行 checkmarx 扫描时,上述方法被识别为反射 XSS 漏洞。

wxy/xyz/Controllers/ABCController.cs 的第 1 行的方法 GetCompanyDetails 获取请求元素的用户输入。然后,该元素的值在未经过适当清理或验证的情况下流经代码,并最终在 wxy/xyz/Controllers/ABCController.cs 的第 4 行的 GetCompanyDetails 方法中显示给用户。这可能会启用跨站点脚本攻击。

如何清理DataSourceRequest request对象以修复此 XSS 问题?

标签: asp.net-mvckendo-gridxsscheckmarx

解决方案


Kendo.Mvc.UI Grid 组件通过在渲染期间对内容进行编码来尽力防止 XSS 问题。默认情况下,网格对单元格中显示的内容进行编码,这意味着如果用户提交了脚本,则脚本不会执行,但会显示为标准文本。请记住,可以禁用此编码通过设置列。编码配置为假

columns.Bound(bank => bank.Website).Filterable(false).Encoded(false);

由于以下内容类型,建议的反射型 XSS 漏洞完全无法被现代浏览器利用:

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

推荐阅读