防伪功能在 asp.net Razor 中无法正常工作
Anti-Fogery not working correctly in asp.net Razor
我有一个 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 上托管时
我终于发现了 IIS 服务器的问题!
在我的网络服务器上,我安装了一个名为 ModSecurity 的工具,它明显干扰了我的 POST 请求。
通过将行 <ModSecurity enabled="false" />
添加到站点的 web.config
中,一切都恢复到其原始状态。
我希望这对以后解决此问题的其他人有所帮助
我有一个 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 上托管时
我终于发现了 IIS 服务器的问题!
在我的网络服务器上,我安装了一个名为 ModSecurity 的工具,它明显干扰了我的 POST 请求。
通过将行 <ModSecurity enabled="false" />
添加到站点的 web.config
中,一切都恢复到其原始状态。
我希望这对以后解决此问题的其他人有所帮助