3

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

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

4

2 回答 2

3

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

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

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

从表面上看,这可能看起来不安全,因为您有一个设置和返回防伪令牌的控制器方法,但是 Web 浏览器强制执行相同来源的安全策略,因此XSRF攻击应该是不可能的。

由于 phonegap 使用本地文件,它不受相同来源策略的约束(请参见此处),因此它将能够向您的 config.xml 中指定的任何域发出 AJAX 请求(请参见 <access origin="..." /> 此处)

于 2013-10-06T03:35:22.710 回答
2

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

于 2013-02-20T13:29:30.180 回答