将ASP.NET MVC4 SPA AntiForgeryToken转换为PhoneGap

时间:2013-02-20 13:25:33

标签: cordova asp.net-mvc-4 single-page-application bundling-and-minification antiforgerytoken

我有SPA应用程序,它使用ASP.NET MVC4的一些功能,如AntiForgeryToken。

我不知道如何在不使用Phonegap不支持的CSHTML的情况下在HTML中实现AntiForgeryToken功能?

2 个答案:

答案 0 :(得分:3)

我认为有一种安全的方法可以在没有服务器生成页面的情况下实现防伪令牌:

  1. 创建一个控制器或web api方法,该方法使用防伪标记值设置仅HTTP的cookie并返回防伪标记值(作为JSON)。 AntiForgery.GetTokens()调用了一个公共方法Html.AntiForgeryToken()。使用此方法读取C#代码中的标记值。
  2. 从phonegap应用中的javascript调用控制器或web api方法(步骤1)并获取返回的防伪令牌,并使用javascript将其添加到表单中(使用名为_RequstVerificationToken的隐藏输入字段)。
  3. 将表单提交给[ValidateAntiForgeryToken]归属的方法,并且应该进行适当的验证。
  4. Microsoft提供了一个非常类似的示例实现here(请参阅标题为“Anti-CSRF和AJAX”的部分)。

    从表面上看,这可能看起来不安全,因为您有一个设置并返回防伪令牌的控制器方法,但是Web浏览器会强制执行same origin security policy,因此无法进行XSRF攻击。

    由于phonegap使用本地文件,因此不受same origin policysee here)的约束,因此它可以向config.xml中指定的任何域发出AJAX请求(see <access origin="..." /> here

答案 1 :(得分:2)

ASP.NET MVC中AntiForgery令牌的当前实现依赖于HTML帮助程序,它生成隐藏的输入字段并设置cookie。如果您无法使用此帮助程序,则必须自行滚动此功能。