我有一个ASP.NET网站,它在今天早上一直运行良好。 我的所有用户都无法登录!
我花了一天时间试图用很少的运气来追捕这个问题。
现在,我已将问题缩小到IIS,不接受POST数据。
每次用户POST时都会输入用户名和密码它会为数据的Request.Form
部分返回NULL。
在我的Dev机器上,它的工作方式与以往一样。我甚至可以使用Request.Form.Allkeys
向我显示所有正在发送的数据。
我使用了谷歌Chrome浏览器的开发人员工具,以检查POST请求是否实际发送,是的,它与数据并列。
似乎IIS根本没有接受任何内容或者根本没有保留POST数据,因为我的ASP.NET代码选择了它
这是我的登录表单:
<section id = "loginForm" >
<form name="mainLog" method="post">
@* If one or more validation errors exist, show an error *@
@Html.ValidationSummary("Log in was unsuccessful. Please correct the errors and try again.", excludeFieldErrors:=True, htmlAttributes:=Nothing)
<fieldset>
<legend>Sign in to Your Account</legend>
<ol>
<li class="email">
<label for="email" @If Not ModelState.IsValidField("username") Then @<text> class="error-label" </text> End If>Username</label>
<input type="text" id="username" name="username" />
@* Write any user name validation errors to the page *@
@Html.ValidationMessage("username")
</li>
<li class="password">
<label for="password" @If Not ModelState.IsValidField("password") Then @<text> class="error-label" </text> End If>Password</label>
<input type="password" id="password" name="password" />
@* Write any password validation errors to the page *@
@Html.ValidationMessage("password")
</li>
<li class="remember-me">
<input type="checkbox" id="rememberMe" name="rememberMe" value="true" checked="@rememberMe" />
<label class="checkbox" for="rememberMe">Remember me?</label>
</li>
</ol>
<input type="submit" value="Log in" />
</fieldset>
</form>
</section>
以下部分显示了我获取此POST数据的位置:
If (IsPost) Then
If Validation.IsValid() Then
' Attempt to log in using provided credentials
'Recive username and password from form
username = Request.Form("username")
password = Request.Form("password")
在我的本地开发框中,这是绝对正常的,用户名和密码被接收和处理。但是在我的实时IIS 8服务器上,它们总是以null形式出现,并且没有数据键。
以下是请求的示例(在BASH中):
-H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: ' -H 'Connection: keep-alive' -H 'DNT: 1' --data 'username=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' --compressed
正在发送用户名数据,但Request.Form.AllKeys
根本没有显示任何数据!
就像我提到的,在本地,我没有这样的问题
任何帮助都会让我的网站重新上线真的很感激!
答案 0 :(得分:0)
我终于发现了IIS服务器的问题!
在我的网络服务器上,我有一个名为ModSecurity Installed的工具,显然是在干扰我的POST请求。
通过将该行[{1}}添加到网站的<ModSecurity enabled="false" />
中,所有内容都会恢复到原始状态。
我希望将来能帮助其他人解决这个问题