【问题标题】:Convert ASP.NET MVC4 SPA AntiForgeryToken to PhoneGap将 ASP.NET MVC4 SPA AntiForgeryToken 转换为 PhoneGap
【发布时间】:2013-02-05 12:30:52
【问题描述】:

我确实有使用 ASP.NET MVC4 的某些功能的 SPA 应用程序,例如 AntiForgeryToken。

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 创建一个控制器或 Web api 方法,使用您的防伪令牌值设置一个仅 HTTP 的 cookie,并返回防伪令牌值(作为 JSON)。有一个由Html.AntiForgeryToken() 调用的公共方法AntiForgery.GetTokens()。使用此方法读取 C# 代码中的令牌值。
    2. 在 phonegap 应用程序中从 javascript 调用控制器或 web api 方法(在步骤 1 中),并获取返回的防伪令牌并使用 javascript 将其添加到表单中(使用名为 _RequstVerificationToken 的隐藏输入字段)。
    3. 将表单提交给带有 [ValidateAntiForgeryToken] 属性的方法,它应该进行适当的验证。

    Microsoft 提供了一个非常相似的示例实现 here(请参阅标题为“反 CSRF 和 AJAX”的部分)。

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

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

    【讨论】:

      【解决方案2】:

      当前在 ASP.NET MVC 中的 AntiForgery 令牌实现依赖于 HTML 帮助器,该帮助器生成隐藏的输入字段并设置 cookie。如果你不能使用这个助手,你将不得不自己滚动这个功能。

      【讨论】:

      • 嗨达林。感谢您的快速答复。问题是如果我想将应用程序部署到 PhoneGap 我不能使用 ASP.NET MVC。你知道如何在不依赖服务器生成 HTML 的情况下实现这个功能吗?
      • 如果没有服务器端脚本,您将无法实现此功能。这没有任何意义。防伪令牌的全部意义在于拥有一个生成此令牌的服务器。
      • 好的。我知道我创建了一个简单的 HTML 页面,它将向 ASP.NET WebAPI 上的某个方法发出 AJAX 请求,该方法将生成令牌并将其返回给客户端。比我可以在对 WebAPI 的下一个请求中使用这个令牌吗?类似的东西。你怎么看?
      • 你不能有一个简单的 HTML 页面。您需要在服务器生成的 HTML 文本中包含一些动态值。
      • 是的,但是我似乎无法将 AntiForgeryToken 功能与 PhoneGap 一起使用...
      猜你喜欢
      • 2012-10-04
      • 2020-10-04
      • 2012-09-04
      • 2012-03-23
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多