【发布时间】:2014-04-27 13:20:37
【问题描述】:
我有一个带有用户名和密码的登录屏幕,但它也有一个公司字段,有点像拥有一个域。
问题是浏览器使用的是域框,就像用户名一样,所以当您在浏览器中保存密码时,如果您在密码框中键入域,它会在密码框中填写密码,那么您只需添加最有可能是该计算机用户的用户名。这显然是一个严重的安全问题。
例如用户:Tom,域:Netweb,通过:test
Tom 登录一次并单击以保存他的密码。下次他回来时,他将 Netweb 输入域并按回车键,它会填充为该域保存的密码,然后他可以输入他的用户名。
对此我能做些什么?有没有办法设置用户名使其不使用公司或在添加密码之前使用前两个?
我的代码如下:
<tr class="center">
<td class="center">User Name
<br />
<asp:TextBox ID="txtUser" runat="server"></asp:TextBox>
</td>
</tr>
<tr class="center">
<td class="center">Company
<br />
<asp:TextBox ID="txtCompany" runat="server"></asp:TextBox>
</td>
</tr>
<tr class="center">
<td class="center">Password
<br />
<asp:TextBox ID="txtPass" runat="server" TextMode="Password"></asp:TextBox>
<br />Remember me?
<asp:CheckBox ID="chkPersistCookie" runat="server" AutoPostBack="false" />
<br />
<br />
<asp:Button ID="btnSubmit" runat="server" Text="Login" CssClass="center" OnClick="btnSubmit_Click" />
<br />
<asp:Label ID="lblMessage" runat="server"></asp:Label>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUser" ErrorMessage="Please enter a user name" ForeColor="Red"></asp:RequiredFieldValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtCompany" ErrorMessage="Please enter a company" ForeColor="Red"></asp:RequiredFieldValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtPass" ErrorMessage="Please enter a password" ForeColor="Red"></asp:RequiredFieldValidator>
</td>
</tr>
【问题讨论】:
-
您是否尝试简单地禁用该文本框,直到(用户名和公司)都具有值?作为替代方案,您可以处理密码文本框中的更改并拒绝它们(preventDefault on keypress),直到其他人被填写。
-
不,但我肯定需要在前两个之后进行回发吗?
-
不,使用 JavaScript 的客户端。
-
但是想必浏览器正在使用JS将密码添加到框中,我该如何阻止呢?
-
不,浏览器没有为此使用 JS。如果您禁用并只读一个输入,那么浏览器将不会填充它。只需为用户名和密码输入的按键添加客户端事件处理程序。