mvc3 安全漏洞中的 kendoui 网格,我该如何解决?
Posted
技术标签:
【中文标题】mvc3 安全漏洞中的 kendoui 网格,我该如何解决?【英文标题】:kendoui grid in mvc3 security vulnerability, how do i get around it? 【发布时间】:2012-07-16 21:37:09 【问题描述】:kendoUI 网格使用 HttpGet 请求在 AJAX 请求期间更新数据。 (http://www.kendoui.com/documentation/asp-net-mvc/helpers/grid/ajax-binding.aspx) 服务器返回一个Json结果,为了让它工作,我们需要使用以下代码:
return Json(Result, JsonRequestBehavior.AllowGet);
这很好,但它是一个安全漏洞(这就是微软让我们把“AllowGet”放在那里的原因)。
返回 Json 的安全方法是在 HttpPost 中,但 kendoui 网格不允许这样做。
我想使用 kendoui 网格。有没有办法使用HttpGet,返回Json,并且安全地做到这一点?
谢谢!
【问题讨论】:
【参考方案1】:如果您使用的是 Kendo Grid 的 MVC 包装器,则不会发生这种情况。由于这种 ASP.NET MVC 行为,网格被配置为发出 POST 请求。不过,请确保您已包含 kendo.aspnetmvc.min.js
。更多信息可以在docs找到。
【讨论】:
我已经包含了 kendo.aspnetmvc.min.js。当我用 [HttpPost] 装饰我的动作时,网格不再更新。仅当 Action 是 [HttpGet] 时才会更新。你能告诉我他们在文档中谈论这个的地方吗?在我在问题中提供的链接中,他们说它将执行 HttpGet 请求。从未提及 HttpPost。 找到了。你完全正确。我的脚本源中有一个拼写错误。谢谢! 不过,如果您通过 AJAX 加载 JSON 数据,请注意 Kendo Dropdownlist 存在此漏洞。您必须执行以下操作以强制下拉列表使用 POST: .DataSource(s => s.Read(a => a.Action(DatasourceAction, DatasourceController).Type(HttpVerbs.Post))【参考方案2】:kendo 数据源在使用 ajax 时默认使用 GET,但可以通过定义传输设置来使用 POST。
这是Telerik kendo CRUD example 使用帖子的代码的缩短版本。
<script>
$(function ()
$("#grid").kendoGrid(
toolbar: ["create", "save", "cancel"],
dataSource:
schema:
model:
id: "ProductID",
fields:
ProductID: editable: false, nullable: true ,
ProductName: validation: required: true ,
UnitPrice: type: "number", validation: required: true
,
transport:
create:
url: "Products.svc/Create",
contentType: "application/json; charset=utf-8",
type: "POST"
,
read:
url: "Products.svc/Read",
contentType: "application/json; charset=utf-8",
type: "POST"
,
parameterMap: function(data, operation)
if (operation != "read")
return JSON.stringify( products: data.models )
);
);
</script>
【讨论】:
我知道你可以在哪里使用类型:“POST”,但我在 MVC 中看不到等效项。我试过'Datasource().Read().Type("Post")',但是没有".Type()"也没有"Datasource().Transport()"以上是关于mvc3 安全漏洞中的 kendoui 网格,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章