在jQuery Ajax调用中防止跨站点请求伪造

时间:2014-08-15 16:56:46

标签: jquery asp.net ajax asmx csrf

我需要帮助来阻止CSRF到我从jQuery ajax调用的webservice。 我对CSRF知之甚少,需要任何示例代码来解决这个安全问题。 我在这里给了soem样本: 我的webmethod(asmx)将是这样的:

[WebMethod]
public Product GetProducts(string category)
{
    Product product = new Product
    {
        Name = "Product1",
        Price = "1500",
        Size = "A1"
    };

    return product;
    }
public class Product
{
    public string Name { get; set; }
    public string Price { get; set; }
    public string Size { get; set; }
}

这个web方法我在某些事件中从jQuery Ajax调用(让我们说点击一些控件)

$(document).ready(function () {
    $("#ajaxTest").click(function () {
        GetProducts();
    });
});


GetProducts = function (category) {
$.ajax(
{
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "/Service/Products.asmx/GetProducts",
    data: "{ category: '" + category + "' }",
    dataType: "json",
    success: function (data) {
        $("#product").text(data.d.Name + " " + data.d.Price + " " + data.d.Size);
    },
});
}

现在我如何在这里实施CSRF预防? 不确定我的问题是否清楚,如果您需要更多详细信息,请告诉我。如果您有任何意见,请告知我们。

提前致谢..!

-Sharath

1 个答案:

答案 0 :(得分:1)

最好的办法是使用同步器令牌模式。这仅仅意味着产生随机挑战"与用户当前会话相关联的令牌。然后将这些挑战令牌插入与敏感服务器端操作相关联的HTML表单和链接中。

由于您正在运行ASP.NET,因此可以使用ViewState功能。在此处查看更多信息:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet