kendoui网格在mvc3安全漏洞中,我该如何解决它?

时间:2012-07-17 21:54:21

标签: json asp.net-mvc-3 security kendo-ui

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,并安全地执行它?

谢谢!

2 个答案:

答案 0 :(得分:4)

如果您使用的是Kendo Grid的MVC包装器,则不会发生这种情况。由于此ASP.NET MVC行为,网格配置为发出POST请求。确保您已包含kendo.aspnetmvc.min.js。更多信息可以在docs

中找到

答案 1 :(得分:2)

使用ajax时,kendo数据源默认使用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>