【问题标题】:Reflected XSS in Kendo DataSourceRequest objectKendo DataSourceRequest 对象中的反射 XSS
【发布时间】:2020-02-26 06:38:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您需要清理返回的值:companyDetails.ToDataSourceResult(request)。如果你这样做,你就不会再有任何问题了。
  • @SPoint 如何清理由companyDetails.ToDataSourceResult(request) 返回的DataSourceRequest 对象。它有许多字符串属性。我们是否清理了它的所有字符串属性?

标签: asp.net-mvc kendo-grid xss checkmarx


【解决方案1】:

我推荐阅读:OWASP CheatSheet Validation

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

但最好的解决方案是

  1. 验证
  2. 编码

这又是打注入和XSS

【讨论】:

  • DataSourceRequest 对象验证的主要问题是它不是由我们编码的。它是Kendo.Mvc.UI 命名空间的一部分,我们不知道要进行哪种验证或清理。对于我们创建的自定义类,我们验证所有字符串属性并在需要时对其进行编码。但是对于这个类,它有很多属性是其他类的对象。我们不知道从哪里开始
【解决方案2】:

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);

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2023-01-22
    • 1970-01-01
    相关资源
    最近更新 更多