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.c​​om/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 网格,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

KendoUI 网格显示总记录数

在 ASP.NET MVC 中为 KendoUI 网格控件中的每一行添加一个包含超链接的列

KendoUI 网格过滤器日期格式

如何从 ajax 查询将数据绑定到 kendoui 网格?

KendoUI 网格的数据转换

Kendo UI - 将命令工具栏放在网格底部