MVC3 AntiForgeryToken 问题

2023-12-22

我正在尝试为我的 MVC3 应用程序实现 AntiForgeryToken。设置 FormAuthentication cookie 后,我遇到 AntiForgeryToken 问题。这是一个解释我的问题的简单示例。

我的家庭控制器具有以下操作方法:

public class HomeController : Controller
{
    public ActionResult Logon()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Logon(string userName, string password)
    {
        FormsAuthentication.SetAuthCookie(userName, false);
        return View("About");
    }


    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult About(FormCollection form)
    {
        return View("PageA");
    }
 }

这是我的登录和关于视图:

登录.cshtml:

   @using (Html.BeginForm("Logon", "Home"))
   {

    @Html.AntiForgeryToken()

    <label> UserName :</label>
    <input  name = "userName" type="text"/>
    <br />
    <label> Password :</label>
    <input name = "password" type="password"/>
    <br />
    <br />
    <input type="submit" value="LogOn" />

   }

关于.cshtml

@using (Html.BeginForm("About", "Home"))
{

    @Html.AntiForgeryToken()
    <p> This is conent of page About</p>
    <input  name = "moreInfo" type="text"/>

    <input type="submit" value="SubmitAbout" />
}

我对“登录”发布方法没有问题。它正在验证 antiforgerytoken 并呈现“关于”视图。有趣的是,当我在“关于”视图上发帖时,我收到错误“未提供所需的防伪令牌或该令牌无效”

有人可以指出我在这里做错了什么吗?

感谢你的帮助。


我做了一些测试,并确定即使在你打电话之后FormsAuthentication.SetAuthCookie(...),问题是httpContext.User.Identity.Name在请求期间仍为空。

因此,要解决这个问题,需要手动设置当前User as so:

FormsAuthentication.SetAuthCookie(email, true);
this.HttpContext.User = new GenericPrincipal(new GenericIdentity(email), null);

这将设置正确的UserHtml.AntiForgeryToken()叫做。

请注意,对于普通的 PRG 模式网站来说,此代码不是必需的,因为重定向后,正确的User将被加载。

另外,既然你的Logon方法需要有效的用户名和密码,它不太容易受到 CSRF 攻击,因此您可能不需要使用ValidateAntiForgeryToken就那个方法。也许这就是 AntiForgeryToken 依赖于用户名的原因。 CSRF 攻击通常仅利用已经经过身份验证的用户。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC3 AntiForgeryToken 问题 的相关文章

随机推荐

  • 如何在Python中连接字符串和数字? [复制]

    这个问题在这里已经有答案了 我试图在Python 中连接一个字符串和一个数字 当我尝试这样做时 它给了我一个错误 abc 9 错误是 Traceback most recent call last File
  • HashMap 和 int 作为键

    我正在尝试构建一个 HashMap 它将整数作为键 将对象作为值 我的语法是 HashMap
  • Win2008 R2 上的 MSMQ 不会接收来自旧客户端的消息

    我在这里遇到一个非常奇怪的问题 我有一台安装了消息队列的 Windows 2008 R2 服务器 在另一台计算机上 运行 Windows 2003 的服务被设置为将消息发送到 2008 服务器上的公共队列 但是 消息永远不会显示在服务器上
  • 视频文件的下载链接

    我有一个视频想要提供下载链接 然而 创建了一个简单的 a href myvideo mp4 Download a 标签 当我点击它 在 Firefox 和 Chrome 中 时 它开始播放视频而不是允许下载视频 有没有一种方法可以在所有当前
  • 在 PHP 中如何不允许用户在注销后返回?

    我刚刚编写了一个PHP登录脚本 我想要完成的是 当用户单击注销链接时 在注销后 无论单击浏览器的后退按钮 他们都无法访问该页面 这是注销功能 Start the Session session start session destroy h
  • 如何在 DTrace 操作中打印 CFStringRef?

    我有一个 DTrace 探针捕获对函数的调用 该函数的参数之一是CFStringRef 这是保存指向 unicode 字符串的指针的私有结构 但是CFStringRef本身不是一个char 所以普通的 DTrace 方法如copyinstr
  • 使用 xdebug 和 netbeans 调试 php-cli 脚本?

    我已设法从 IDE 本身启动 php cli 脚本调试会话 但我需要从 shell 命令行启动调试会话 这些是相当复杂的维护 PHP 脚本 需要大量输入参数 因此从 Netbeans 中输入参数有点麻烦 我之前用 Zend studio 做
  • XML 模式中的递归?

    我需要创建一个 XML 模式来验证 XML 文档的树结构 我不确切知道树的出现次数或深度级别 XML 示例
  • CPython 源 - 如何构建静态 python26.lib?

    我正在尝试使用 Cython 将 hello pyx 文件编译为 exe 第一步是使用命令 cython cplus embed hello pyx 将 hello pyx 编译为 hello cpp 文件 Embed选项意味着Genera
  • Sublime Text - 选择最后一个增量选择的元素?

    I recently discovered the insanely useful ctrl D functionality in sublime text With a careful eye it s almost as functio
  • AngularJS ng-model 的默认值

    是否可以使 ng models 获得默认值 例如 我有一个使用了 jQuery 的表单serialize函数 每当 a 值不存在时 它仍然会将其包含在序列化数据中 例如 name age 但是 当我使用尝试使用 Angular 发布它时 h
  • Express 3.4.8 照片上传问题-不使用bodyParser()如何解决?

    我在 Gist 的代码 https gist github com yhagio 10654836 https gist github com yhagio 10654836 我是 Express 新手 尝试从 Node js in Act
  • WAMPServer 在 Windows 10 上无法正常工作,“无法执行服务操作”

    最近我从Windows 7 64升级到Windows 10 64 在此之前 我已经让 WAMPServer 运行得很好 但现在它不起作用了 每当我启动它时 我都会使服务器离线 单击 上线 只会弹出 无法执行服务操作 错误 我已经尝试过重新安
  • mapboxgl.js 与 leaflet.js

    我即将启动一个 Web 应用程序 其主要目的是显示 Mapbox 地图 切换图层并根据与地图的交互显示数据 我想知道我应该使用 mapboxgl js 和 leaflet js mapboxgl js 或 leaflet js 每个人都一直
  • 异步下载多个文件并等待所有文件完成,然后再执行其余代码

    我正在尝试从互联网下载多个文件并等待所有文件完成 这是我正在运行的 C 控制台应用程序 因此不需要进度条事件处理程序 然而 即使所有文件尚未下载 它目前也只是继续执行代码 1 下载所有文件 2 完成下载文件A 3 所有文件下载完毕 4 文件
  • 使用 webclient C# 检查 URL 是否为下载链接

    我正在从历史数据库中读取数据 对于读取的每个 URL 我都会下载它并将数据存储到字符串中 我希望能够确定该链接是否是下载链接 即 exe 或 zip 例如我假设我需要阅读标头来确定这一点 但我不知道如何使用 WebClient 来做到这一点
  • 如何使用 DataBinder.Eval 在 gridview 中选中复选框

    我正在尝试检查一个复选框 基本上在我的数据库中该值是否为 1 或 0 一个叫做Active bit not null 我可以将值传递给gridview 但现在我试图检查该位是否为1 或者如果该位为0则不检查但它不起作用 它只是显示未检查但该
  • 自动保存您正在处理的文件?

    可以让 Eclipse 自动保存您已打开和正在处理的文件 并且这样做不会触发任何与保存挂钩的操作吗 Windows gt 首选项 gt 常规 gt 工作区 gt 工作区保存间隔 以分钟为单位 中的选项是否执行此操作 您可以使用智能保存 它是
  • 我可以在 IPAD 中运行 html/Javascript 文件吗?

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个文件夹 其中有一个 html 文件夹和 javascript 文件 我可以在没有互联网的情况下在 ipad 中仅从文件系统运行该 html 页
  • MVC3 AntiForgeryToken 问题

    我正在尝试为我的 MVC3 应用程序实现 AntiForgeryToken 设置 FormAuthentication cookie 后 我遇到 AntiForgeryToken 问题 这是一个解释我的问题的简单示例 我的家庭控制器具有以下