使用CCW的ASP.NET MVC3 AntiForgery令牌

时间:2012-10-15 17:18:44

标签: c# asp.net asp.net-mvc asp.net-mvc-3 c#-4.0

我有一些遗留应用程序,目前正在向MVC3表单发布基本信息。我想将其分离为GET并传递查询字符串中的值。很容易。但是,我想在请求中添加一个防伪标记。首先,这看起来是一个不错的选择吗?其次,是否存在从非MVC3模块到MVC3表单实现此类功能的任何示例?

我的另一种选择是加密查询字符串。

2 个答案:

答案 0 :(得分:1)

ASP.NET实现的Anti-Forgery Token是一种防止CSRF(corss-site-request-forgery)并且只能与HTTP POST一起使用的机制。

由于您正在实现基于GET的“API”,因此该令牌将无效(请注意限制,例如查询字符串的长度)。

我不确定你的目标到底是什么......根据你的目标,解决方案是加密或签署查询字符串或两者。

答案 1 :(得分:1)

您可以在每个帖子中使用此mvc3操作。您只需要确保您的postdata与serverside对象匹配。是的,你必须使用防伪标记来保证安全。

在javascript中,您可以使用jQuery制作这样的帖子。正如您所看到的,我不使用表单,只是一些javascript代码。 Mvc可以完美地处理这个问题。

$.ajax({
    type: 'POST',
    url: urlToYourMvcAction,
    data: {
        name: 'John Doe',
        age: 25
    }, 
    success: successCalback,
    error: errorCallback);

public class Person
{
    public int Id { get; set; }
    public string Name { get; ;set }
    public int Age { get; set; }
}

public class PersonController : Controller
{
    [HttpPost]
    public ActionResult Add(Person person)
    {
          //Your code
    }
}

您可以使用旧版应用程序中的c#WebClient对象轻松发出相同的帖子请求。您可以使用fiddler或开发人员工具检查请求并传入发布所需的正确参数。

哦,使用get请求可以在请求变大时给您带来麻烦。帖子用于将数据发送到服务器。获取用于从服务器获取数据。