Forg-6ren">
gpt4 book ai didi

java - jsp 自动完成 ="off"在 Chrome 或 Firefox 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:33 25 4
gpt4 key购买 nike

我对以下内容进行了修改,以防止用户名出现在登录框中。

    <div class="row clearfix">
<label for="j_username">Username:</label>
<input tabindex="1" type="text" name="j_username" id="j_userName" class="text" value='<c:if test="${param.login_error == 'authFailure'}">${SPRING_SECURITY_LAST_USERNAME}</c:if>' />
<p class="forgot-password">
<a tabindex="5" href="forgot-username-password.htm">Forgot your username or password?</a></p>
</div>

<input tabindex="1" type="text" name="j_username" id="j_userName" **autocomplete="off"** class="text" value='<c:if test="${param.login_error == 'authFailure'}">${SPRING_SECURITY_LAST_USERNAME}</c:if>' />

我认为这会阻止用户名被保存,你知道为什么 Chrome 和 FF 似乎忽略了这一点吗?

干杯,

最佳答案

我认为问题在于更好地实现自动表单填充,浏览器正在使用它来帮助提高易用性。即使指定 autocomplete="off" ,Google Chrome 仍然会填充这些密码,但会以一种我们可以用来破解此功能的可预测方式,从而实现我们正在寻找的功能。

注意:禁用密码自动完成的一个重要原因是为了防止 CSRF,如所述here .

考虑以下几点:

<form action="login.asp" method="post" class="form-horizontal" name="login-form" role="form" autocomplete="off">
<input type="hidden" name="<%=STATIC_CSRF_TOKEN_NAME%>" value="<%=AntiXssInstance.HtmlAttributeEncode(GetExternalCSRFToken())%>" />
<input type="email" class="form-control" id="email" name="email" placeholder="Email address">

<input type="password" class="form-control" id="password" name="password" placeholder="Password">

<button type="submit" class="btn btn-success">Login</button>
</form>

现在将其与此进行比较:

<form action="login.asp" method="post" class="form-horizontal" name="login-form" role="form" autocomplete="off">
<input type="hidden" name="<%=CSRF_TOKEN_NAME%>" value="<%=GetExternalCSRFToken()%>" />
<input type="email" class="form-control" id="email" name="email" placeholder="Email address">

<input type="password" style="display: none;" id="password-breaker" />
<input type="password" class="form-control" id="password" name="password" placeholder="Password">

<button type="submit" class="btn btn-success">Login</button>
</form>

请注意我是如何将密码字段加倍的,但是包含我实际想要处理的值的字段将被正确命名。因此,Google Chrome 等浏览器“覆盖”autocomplete="off" 的可预测方式属性是通过搜索 <input type="password" />紧跟在浏览器存储了用户密码的登录 ID 字段之后。这就是为什么此属性在某些浏览器(包括 Chrome)中似乎不起作用的原因。

但是,通过使用我概述的这种方法,它实质上是欺骗浏览器预填充 #password-breaker字段(我们不打算使用)与用户的密码并留下实际的 #password字段空白。

到目前为止,我还没有在所有可能的浏览器和版本中对此进行测试,但我发现它现在是一个合理的“跨浏览器”兼容性解决方法,并且是完全依赖于非工作 autocomplete 的补充步骤。属性。

关于java - jsp 自动完成 ="off"在 Chrome 或 Firefox 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22666480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com