C# 如何设置正确的用户名和密码文本框?
我有一个带有用户名和密码的登录屏幕,但它也有一个公司字段,有点像拥有一个域 问题是浏览器使用的域框与用户名类似,因此当您在浏览器中保存密码时,如果您键入域,它会在密码框中填充密码,那么您只需添加最有可能是该计算机用户的用户名。这显然是一个严重的安全问题 例如,用户:Tom,域:Netweb,通过:测试 Tom登录一次并单击保存密码。下次他回来时,他将Netweb输入域并按return,它将填充为该域保存的密码,然后他可以输入用户名 我能做些什么?有没有办法设置用户名,使其不使用公司,或者在添加密码之前使用前两个 我的代码如下:C# 如何设置正确的用户名和密码文本框?,c#,html,asp.net,browser,C#,Html,Asp.net,Browser,我有一个带有用户名和密码的登录屏幕,但它也有一个公司字段,有点像拥有一个域 问题是浏览器使用的域框与用户名类似,因此当您在浏览器中保存密码时,如果您键入域,它会在密码框中填充密码,那么您只需添加最有可能是该计算机用户的用户名。这显然是一个严重的安全问题 例如,用户:Tom,域:Netweb,通过:测试 Tom登录一次并单击保存密码。下次他回来时,他将Netweb输入域并按return,它将填充为该域保存的密码,然后他可以输入用户名 我能做些什么?有没有办法设置用户名,使其不使用公司,或者在添加密
<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>
用户名
单位
密码
还记得我吗?
我不确定我是否理解你的问题。但有几个提示:
您可以使用autocomplete告诉Chrome不要记住密码:
您可以使用tabindex:更改文本框的选项卡顺序。如果您唯一的问题是您可以自动填充密码,您可以通过codebehind执行以下操作来禁用此功能:
txtPass.Attributes.Add("autocomplete", "off");
使用“自动完成”字段,最好尽可能多地向浏览器提供有用的指针。在您的情况下,这将类似于:
<asp:TextBox ID="username" x-autocompletetype="given-name" runat="server"></asp:TextBox>
<asp:TextBox ID="txtCompany" x-autocompletetype="organization" runat="server"></asp:TextBox>
<asp:TextBox ID="password" x-autocompletetype="password" runat="server" TextMode="Password"></asp:TextBox>
其他链接:
$("#chkPersistCookie").change(function() {
if(this.checked) {
var username = $('#txtUser').attr("value");
var password = $('#txtPass').attr("value");
$.cookie('username', username, { expires: 14 });
$.cookie('password', password, { expires: 14 });
$.cookie('remember', true, { expires: 14 });
} else {
$.cookie('username', null);
$.cookie('password', null);
$.cookie('remember', null);
}
});
要获取cookie并将其分配回控件,请使用以下命令
var remember = $.cookie('remember');
if ( remember == 'true' ) {
$("#chkPersistCookie").attr("checked",true)
var username = $.cookie('username');
var password = $.cookie('password');
$('#txtUser').attr("value", username);
$('#txtPass').attr("value", password);
}
如果问题仅仅是文本框中密码的自动提示,那么您需要禁用文本框的自动完成属性。现在通过交换文本框来解决。您在这里遇到的是表单值的
自动完成属性。提交表单时,浏览器会保存表单值,以便在同一页面上进一步使用。浏览器有时还提供用户保存网站密码的功能
是这样的
<input type="text" name="someInputName" autocomplete="off|on" />
但是请记住,即使浏览器为自动完成保存数据。它将永远不会为自动完成功能保存用户的密码。在用户允许软件保存之前,它们不会保存在任何地方
您现在面临的是浏览器的表单自动完成功能。在这种情况下,浏览器会保存用户的数据,然后您可以通过转到浏览器的设置和引擎盖下的更多内容,然后选择保存的密码,然后删除站点的密码,从浏览器中删除该数据
否则,您无法控制阻止用户执行的操作。但是,正如谷歌所做的那样。你们可以实现他们关于安全的想法
他们所做的是,他们向您显示一个密码类型的输入框,然后他们写入与帐户关联的电子邮件地址。这样,你会欺骗浏览器,浏览器会认为你需要其他东西,而不是他的密码
你还可以做一些其他的事情。比如,在一个页面上获取用户的电子邮件地址,然后在下一个页面上获取密码,就像谷歌现在所做的那样。我们如何处理这个问题,是在每次加载页面时,在文本框的id和name属性上附加一个随机值。然后浏览器无法调用自动完成,因为它是为具有不同标识符的字段存储的
为此,请使用clientmode=“Static”,这样.net就不会为您生成Id。对于域/公司,请使用:
<asp:TextBox id="Textbox1" runat="server" autocomplete="off"></asp:TextBox>
它将禁用textbox公司的自动完成功能
如果无法解决问题,另一种方法是使用一些验证,如:
输入域/公司时,检查是否提供用户名
如果未提供用户名和密码,请先给出错误消息以填写用户名,并故意清空公司和密码的文本框
jquery中的一些代码如下所示:
$(txtDomain).focusout(function() {
if($txtUserName).val().trim()=="" && $(txtDomain).val().trim()!="" && $(txtPass).val().trim()!="")
{
alert('Please fill the username first');
$(txtPass).val('');
$(txtDomain).val('');
}
我知道这不是一个好的解决方案&也存在可用性问题。但这可能是最后的手段,如果任何其他方法都不起作用的话
希望有帮助。浏览器自动将凭据填充到错误的文本字段?
有时我会在Chrome和Safari上注意到这种奇怪的行为,当有相同形式的密码字段时。我猜,浏览器会查找密码字段以插入您保存的凭据。然后它自动填充(由于观察而只是猜测)最近的类似文本的输入字段,该字段出现在DOM中密码字段的前面。由于浏览器是最后一个实例,您无法对其进行控制,因此有时即使autocomplete=off也不会阻止您填写凭据。这个只读修复程序对我有效
当您将订单切换为“用户…密码…公司”时,它会起作用。同样,浏览器将使用密码之前的字段(现在是用户)来填写凭据
修复浏览器自动填充:
设置只读和设置可写焦点(单击并选项卡)
您是否尝试简单地禁用该文本框,直到两者(用户名和公司)都有值?作为替代方案,您可以处理密码文本框中的更改,并拒绝这些更改(按键时为preventDefault),直到其他更改被填充。不,但我肯定需要在前两个文本框中的每个文本框之后进行回发。不,客户端使用JavaScript。但可能浏览器正在使用JS将密码添加到文本框中,我将如何停止?不,浏览器不是我们
Textbox1.Attributes.Add("autocomplete", "off");
$(txtDomain).focusout(function() {
if($txtUserName).val().trim()=="" && $(txtDomain).val().trim()!="" && $(txtPass).val().trim()!="")
{
alert('Please fill the username first');
$(txtPass).val('');
$(txtDomain).val('');
}
<input type="password" readonly
onfocus="$(this).removeAttr('readonly');"/>