反映了Kendo DataSourceRequest对象中的XSS



我们在Kendo网格数据填充的控制器中有以下操作

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

在运行checkmarx-scan时,发现上述方法存在Reflected XSS漏洞。

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

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

我建议阅读:OWASP CheatSheet Validation。

是的,您需要验证您拥有的所有数据,格式和类型。也许您需要解析String的每个元素,并在应用清理之前将每个元素转换为一个String。另一种解决方案可以只是对companyDetails.ToDataSourceResult(request)的结果进行编码。这场战斗只有XSS。

但最好的解决方案是

  1. 验证
  2. Encode

这场战斗再次注入和XSS

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

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

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

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

最新更新