asp.net-mvc - 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 问题?
解决方案
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);
推荐阅读
- python - Pandas 列中的未嵌套数据框
- java - 用注解替换 SimpleFormController(spring < 3 到 4.3 的转换)
- sql - 如何使用 STRING_AGG 将一些值分组到一行中?
- mysql - SQL - 仅获取仅包含“A”字符的行
- java - 如何在空格后不重复相同的记录
- html - 在 kramdown 中向单个嵌套列表项添加样式的更好方法
- database - 如何在sqlite中将日期转换为儒略日期(不是儒略日数)
- c# - 产生所需数量的预制件
- laravel - 无法在 Laravel 6.0 中使用 Composer 安装软件包
- javascript - 如何将用户在搜索栏中输入的歌曲名称发送到 api