相关疑难解决方法(0)

解决防伪令牌问题

我有一个表格帖子,一直给我一个反伪造令牌错误.

这是我的表格:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.EditorFor(m => m.Email)
    @Html.EditorFor(m => m.Birthday)
    <p>
        <input type="submit" id="Go" value="Go" />
    </p>
}
Run Code Online (Sandbox Code Playgroud)

这是我的行动方法:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Join(JoinViewModel model)
{
    //a bunch of stuff here but it doesn't matter because it's not making it here
}
Run Code Online (Sandbox Code Playgroud)

这是web.config中的machineKey:

<system.web>
  <machineKey validationKey="mykey" decryptionKey="myotherkey" validation="SHA1" decryption="AES" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

A required anti-forgery token was not supplied or was invalid.
Run Code Online (Sandbox Code Playgroud)

我已经读过,更改HttpContext上的用户会使令牌无效,但这不会发生在这里.我的Join操作上的HttpGet只返回视图:

[HttpGet]
public ActionResult Join()
{
    return this.View();
}
Run Code Online (Sandbox Code Playgroud)

所以我不确定发生了什么.我一直在搜索,似乎所有东西都表明它是机器键更改(应用程序周期)或用户/会话更改.

还有什么可以继续?我该如何解决这个问题?

asp.net-mvc antiforgerytoken asp.net-mvc-3

34
推荐指数
4
解决办法
6万
查看次数

RequestVerificationToken不匹配

我有反CRSF MVC机制的问题.cookie和返回的表单输入不匹配.我每次都会收到一个错误,只在一个特定的页面中.在应用程序的其余部分,它运行良好.

服务器正在返回HTTP 500 Internal Server Error,我可以在日志中看到此异常:

[System.Web.Mvc.HttpAntiForgeryException]:{"未提供所需的防伪标记或无效."}

这是服务器生成的隐藏输入:

<input name="__RequestVerificationToken" type="hidden" value="QK8P7rjyZE6Vm5seY7Fr704YCOoFGdTIMzl1W7R0ZFpXSMjGKLG2T05DfFSYTxvtQCEx7DDT69DGsDB2+ZXFHY8oAjiKz0gw8BhDFywgmfIpoXnGpj7fONNzIIfvbrDrE9WJsMu6Io/0bDLM5WfKs0zktiNjyOWpfYrmnfINYmjW8NLOZFoz74xTcgTptAld">
Run Code Online (Sandbox Code Playgroud)

这是Cookie返回:

Set-Cookie:__RequestVerificationToken_L2VGbG93=skmTAVI8HCbfxDS+xhioIMIISL3UOBI7qJM1JbHjTtAqKl4W70pDUcTKMm0p3R3mrHDziE8vXw0C0OO4HArzWO1/e6py+v/cFdbe9maFgjl4jMiZ9Wc4YIhC6+IUXkk6yqJDJ8dCIr8qtGaYcD9IX+m7/SlVhu521KQSWJYRcaY=; path=/; HttpOnly
Run Code Online (Sandbox Code Playgroud)

当我检查服务器发送的内容时,cookie完全相同,但我认为有效负载具有不同的编码:

__RequestVerificationToken:QK8P7rjyZE6Vm5seY7Fr704YCOoFGdTIMzl1W7R0ZFpXSMjGKLG2T05DfFSYTxvtQCEx7DDT69DGsDB2%2BZXFHY8oAjiKz0gw8BhDFywgmfIpoXnGpj7fONNzIIfvbrDrE9WJsMu6Io%2F0bDLM5WfKs0zktiNjyOWpfYrmnfINYmjW8NLOZFoz74xTcgTptAld
Run Code Online (Sandbox Code Playgroud)

区别在于两个出现编码的字符:

    /    ->   %2F  
    +    ->   %2B
Run Code Online (Sandbox Code Playgroud)

这些是我在隐藏输入字段和后有效负载之间可以找到的唯一差异.

什么可能是导致ValidateAntiForgeryToken验证令牌失败的问题?

问候.

security asp.net-mvc csrf antiforgerytoken asp.net-mvc-3

34
推荐指数
1
解决办法
4万
查看次数

所需的防伪cookie"__RequestVerificationToken"不存在

我的网站每天大约20次提出这个异常,通常表单工作正常,但有些情况发生这个问题,我不知道为什么这么随机.

这是elmah记录的异常

500 HttpAntiForgery所需的防伪cookie __RequestVerificationToken"不存在.

但它正在发送由elmah在XML日志中显示的令牌的形式

<form>
    <item name="__RequestVerificationToken">
      <value string="DNbDMrzHmy37GPS6IFH-EmcIh4fJ2laezIrIEev5f4vOhsY9T7SkH9-1b7GPjm92CTFtb4dGqSe2SSYrlWSNEQG1MUlNyiLP1wtYli8bIh41"/>
    </item>
    <item name="toPhone">
      <value string="XXXXXX"/>
    </item>
    <item name="smsMessage">
      <value string="xxxxxxxx"/>
    </item>
</form>
Run Code Online (Sandbox Code Playgroud)

这是我在控制器上的方法,它使用数据属性来检查令牌是否有效

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<JsonResult> Send(SMSModel model)
{
    // my code goes here
}
Run Code Online (Sandbox Code Playgroud)

这是我在视图上的表单

@using (Html.BeginForm("Send", "SMS", FormMethod.Post, new { @class = "form-sms", autocomplete = "off" }))
{
    @Html.AntiForgeryToken()
    <div class="row">
        <div class="col-md-12">
            <div class="form-group">
                <div class="input-group">
                    <div class="input-group-addon">+53</div>
                    @Html.TextBoxFor(m => m.toPhone, new { @class = "form-control", placeholder = "teléfono", required = "required", type = …
Run Code Online (Sandbox Code Playgroud)

c# cookies asp.net-mvc jquery antiforgerytoken

27
推荐指数
3
解决办法
4万
查看次数

如何处理表单提交ASP.NET MVC后退按钮?

我有一个表单,允许用户键入数据,然后提交.如果一切都在这个动作结果上运行良好,那么我会将用户重定向回感谢页面.

我现在的问题是,当用户点击后退按钮时,他们将能够返回到表单页面,输入仍然存在.

如果用户再次点击提交,我将获得一些潜在的奇怪错误.

那么就asp.net mvc而言,处理点击后退按钮的用户的最佳方法是什么?

谢谢!

asp.net asp.net-mvc back-button

5
推荐指数
2
解决办法
6307
查看次数