禁用表单密码自动完成但不禁用其他字段

时间:2011-12-07 18:29:30

标签: javascript html spring autocomplete

我知道您可以通过在表单上设置autocomplete="off"来禁用表单上的自动填充功能。

我遇到的问题是,我想阻止浏览器填充密码字段但不想禁用用户名或其他字段。

要考虑的另一件事是遗留数据。在表单上使用autocomplete="off"(甚至是字段本身)不会阻止已保存密码的现有用户获得免费通行证。或者使用Web检查器,更改自动完成和提交的值,允许自己保存密码。

我知道可以在每次访问时将密码字段name属性更改为随机/新属性。遗憾的是,我正在使用java / spring后端,并且我被告知如果没有巨大的重构/覆盖,这是不容易管理的。

你会如何设计这个?您如何强制该字段始终为空?浏览器没有一致的方法让事件通过密码管理器通知您预先填充 - 有些可能触发onChange,其他可能不会。

我想我可以使用javascript移动字段并动态构建真实表单并提交但是再一次,这将影响Spring安全性和验证等。还有其他想法吗?

3 个答案:

答案 0 :(得分:0)

你可以在调用onFocus时将变量设置为true(如userFocus) 并在onChange attribut上,但是如果userFocus == false,则将“value”重置为NULL的简短代码)类似于过度使用imo但是迁移工作

修改

function reset()
{
if (document.getElementById("hidden").value!=" ")
{
document.getElementById("demo").value=" ";
}
else;
}

function getfocus()
{
document.getElementById("hidden").value=" ";
}
else;
}

<input type="password" id="pwd" onchange="reset()" onfocus="getfocus()"/>
<input type="hidden" id="hidden" value="not focus"/>

答案 1 :(得分:0)

我必须为IE 11找到这个解决方案(因为它忽略了自动完成属性)。它在其他浏览器中工作正常。真的更像一个工作,但它的工作原理。 https://stackoverflow.com/a/20809203/1248536

答案 2 :(得分:0)

我最近遇到了这个问题,并且没有简单的解决方案,因为我的字段可以预先填充,我想通过在准备好的事件中设置密码类型来分享我提出的优雅黑客。

创建时不要将输入字段声明为类型密码,而是添加一个就绪事件监听器以便为您添加:

function createSecretTextInput(name,parent){
    var createInput = document.createElement("input");
    createInput.setAttribute('name', name);
    createInput.setAttribute('class', 'secretText');
    createInput.setAttribute('id', name+'SecretText');
    createInput.setAttribute('value', 'test1234');

    if(parent==null)
       document.body.appendChild(createInput);
    else
        document.getElementById(parent).appendChild(createInput);

    $(function(){
        document.getElementById(name+'SecretText').setAttribute('type', 'password');
    });
};

createSecretTextInput('name', null);

http://jsfiddle.net/N9F4L/