【问题标题】:Anti-Fogery not working correctly in asp.net Razor防伪在 asp.net Razor 中无法正常工作
【发布时间】:2016-07-09 07:32:33
【问题描述】:

我有一个 ASP.NET Webpages Razor 语法页面,它突然停止对用户进行身份验证!

如果用户现在尝试登录该站点,服务器会响应以下消息:

所需的防伪表单字段“__RequestVerificationToken”不存在。

嗯....是的!

查看我的登录页面的来源,它确实添加了隐藏字段,如下所示..

<section id="loginForm">
    <form method="post">
        <fieldset>
        <input name="__RequestVerificationToken" type="hidden" value="WgwaKIsXipJ4C8IRsaz__C_tW02ejupv8af-w3czwefo2AEacVlGs_k-lFNRfLqWr0inzHxtkEnXgPKZMvacv5u1LVfLphIP8R1JGukMZcA1" />
        <legend>Sign in to Your Account</legend>
        <ol>
            <li class="email">
                <label for="email" >Username</label>
                <input type="text" id="email" name="username"   />
                <span class="field-validation-valid" data-valmsg-for="username" data-valmsg-replace="true"></span>
            </li>
            <li class="password">
                <label for="password" >Password</label>
                <input type="password" id="password" name="password"  />
                <span class="field-validation-valid" data-valmsg-for="password" data-valmsg-replace="true"></span>
            </li>
            <li class="remember-me">
                <input type="checkbox" id="rememberMe" name="rememberMe" />
                <label class="checkbox" for="rememberMe">Remember me?</label>
            </li>
        </ol>
        <input type="submit" value="Sign in" />
    </fieldset>
    </form>
</section>

要创建此字段,我使用 @AntiFogery.GetHTML() 并在验证用户身份的 post 方法中使用 @AntiForgery.Validate()

我不知道这是否有帮助。但如果我一起删除验证(服务器和客户端),我在尝试登录网站时会收到 403 错误。

奇怪的是,这一切都在没有任何干预的情况下突然发生?

最后,在我的本地机器上,这不会发生。仅当托管在 IIS 8 上时

【问题讨论】:

  • 你在网络农场吗?
  • 对不起,我不明白你的意思?
  • 您的网站是否托管在网络场中?它是否由多个服务器提供服务?每个服务器的防伪令牌都是唯一的,因此如果一台服务器发出它,它将在另一台服务器上无效
  • 啊,我明白了。不,不是。我实际上只是尝试在 webconfig 中设置解密密钥,但在这个问题上仍然没有运气

标签: asp.net iis razor antiforgerytoken


【解决方案1】:

我终于发现了 IIS 服务器的问题!

在我的网络服务器上,我安装了一个名为 ModSecurity 的工具,它显然会干扰我的 POST 请求。

通过将&lt;ModSecurity enabled="false" /&gt; 行添加到站点的web.config 中,一切都恢复到了原始状态。

我希望这对以后解决此问题的其他人有所帮助

【讨论】:

  • 您最好不要操纵导致问题的规则,而不是完全禁用 ModSecurity?
  • ModSecurity 不是一项要求,而是一项测试。所以在这个应用程序中这个解决方案很适合。
  • 如果您不需要 ModSecurity,将其关闭绝对比尝试正确配置它更容易。 :-)
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 2012-09-07
  • 2015-01-17
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多