C# 如何设置正确的用户名和密码文本框?

C# 如何设置正确的用户名和密码文本框?,c#,html,asp.net,browser,C#,Html,Asp.net,Browser,我有一个带有用户名和密码的登录屏幕,但它也有一个公司字段,有点像拥有一个域 问题是浏览器使用的域框与用户名类似,因此当您在浏览器中保存密码时,如果您键入域,它会在密码框中填充密码,那么您只需添加最有可能是该计算机用户的用户名。这显然是一个严重的安全问题 例如,用户:Tom,域:Netweb,通过:测试 Tom登录一次并单击保存密码。下次他回来时,他将Netweb输入域并按return,它将填充为该域保存的密码,然后他可以输入用户名 我能做些什么?有没有办法设置用户名,使其不使用公司,或者在添加密

我有一个带有用户名和密码的登录屏幕,但它也有一个公司字段,有点像拥有一个域

问题是浏览器使用的域框与用户名类似,因此当您在浏览器中保存密码时,如果您键入域,它会在密码框中填充密码,那么您只需添加最有可能是该计算机用户的用户名。这显然是一个严重的安全问题

例如,用户: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>
其他链接:


手动管理cookie, 这是jQuery示例

     $("#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');"/>