停止 LastPass 填写表格

有没有办法防止 LastPass 浏览器扩展插件用名为“ username”的输入字段填写基于 HTML 的表单?

这是一个隐藏字段,因此我不希望任何软件使用这个字段来实现它们的目的:

<input type="text" name="username" id="checkusername" maxlength="9" value="1999" class="longinput" style="display:none">

解决方案不应该像“重命名输入字段”那样。

66313 次浏览

好好想想上次通过荣誉的 autocomplete="off"属性的输入,但我不是100% 肯定。

剪辑 正如其他人指出的那样,这只有在用户已经配置了最后一次通行证才能正常工作。

必须满足两个条件:

  1. 表格(而不是元素)需要有 autocomplete="off"属性
  2. Lastpass 用户需要启用此选项:
    • (旧) Settings > Advanced > Allow pages to disable autofill
    • (新增) Account Options > Extension Preferences > Advanced > Respect AutoComplete=off: allow websites to disable Autofill

所以这取决于用户和开发人员。

我知道我迟到了,但我发现了这个当我试图阻止最后通行证毁了我的表格。@ takeshin 是正确的,因为自动补全是不够的。我最后做了下面的黑客,只是为了隐藏符号。虽然不怎么样,但我摆脱了那个标志。

如果任何 lastpass 开发人员正在阅读这篇文章,请给我们一个要使用的属性,这样我们就不必求助于这样的东西。

form[autocomplete="off"] input[type="text"] {
background-position: 150% 50% !important;
}

对我有效的方法是在表单的 id 中使用单词“-search-”,比如 <form id="affiliate-search-form">,而 lastpass 不会将其元素添加到表单输入中。它适用于类似 <form id="search">的简单程序,但不适用于 <form id="se1rch">

将“ search”添加到输入 id

<input type="text" name="user" id="user-search"/>

虽然有点晚了,但我刚刚通过修改表单达到了这个目的:

<form autocomplete="off" name="lastpass-disable-search">

我想这些傻瓜最后会认为这是一个搜索表单。但是,这不适用于密码字段!在这种情况下,Lastpass 会忽略 name 字段。

我做到这一点的唯一方法是在表单的顶部直接添加以下内容:

<form autocomplete="off">
<div id="lp" ><input type="text" /><input type="password" /></div><script type="text/javascript">setTimeout(function(){document.getElementById('lp').style.display = 'none'},75);</script>
</form>

它会导致令人讨厌的闪烁,但是确实移除了自动填充的废话——尽管它仍然显示“生成密码”小部件。LastPass 等待 domready,然后检查是否有任何可见的密码字段,因此不可能隐藏或缩小上面的模拟字段。

对我来说,无论是工作的 type=search,这是有点等于 text或使用 role=note

你可以检查 LastPass-JavaScript,但它很大,也许你可以找到一些解决方案,从我看到的他们只检查4个输入类型,所以 input type=search将是一个解决方案:

!c.form && ("text" == c.type || "password" == c.type || "url" == c.type || "email" == c.type) && lpIsVisible(c))

这些也是他们似乎忽略的 role关键词:

var c = b.getAttribute("role");
switch (c) {
case "navigation":
case "banner":
case "contentinfo":
case "note":
case "search":
case "seealso":
case "columnheader":
case "presentation":
case "toolbar":
case "directory":`

我检查了 LastPass 的 onloadwff.js,准备编写26.960行代码:)

尝试了-搜索重命名,但由于某些原因不起作用:

  1. 标记表单自动完成-自动完成 = “ off”
  2. 将表单字段输入类型更改为文本
  3. 添加一个新的类到你的 css 屏蔽输入,模拟一个密码字段
  4. Css 位: input.masker { - webkit-文本-安全: 光盘; }

在最新版本的 FF 和 Chrome 中进行了测试。

添加

data-lpignore="true"

为我关闭了灰色的 LastPass [ ... ]框。

来源于 LastPass.com

遗憾的是,这里的所有选项(autocomplete、 data-lpignore 等)都不能阻止 LastPass 自动填写我的表单字段。我对这个问题采取了更为严厉的方法,而是通过 JavaScript 异步设置输入 name属性。下面这个与 jQuery 相关的函数(从表单的 oncommit 事件处理程序调用)完成了这个任务:

function setInputNames() {
$('#myForm input').each(function(idx, el) {
el = $(el);
if (el.attr('tmp-name')) {
el.attr('name', el.attr('tmp-name'));
}
});
}


$('#myForm').submit(setInputNames);

在表单中,我只是使用了 tmp-name属性来代替等效的 name属性:

<form id="myForm" method="post" action="/someUrl">
<input name="username" type="text">
<input tmp-name="password" type="password">
</form>

更新2019-03-20

由于 AngularJS 依赖于具有 name属性的表单字段,以便 ngMessages 能够正确地显示字段验证错误消息,因此我仍然遇到了上述问题。

最终,我能找到的阻止 LastPass 在我的密码更改表单中填充密码字段的唯一解决方案是:

  1. 避免完全使用 input[type=password],AND
  2. 字段名称中没有“ password”

因为我需要能够正常地提交表单,所以我仍然使用我原来的解决方案来“及时”更新字段名称。为了避免使用密码输入字段,我发现 这个解决方案工作得非常好。

这个 ES6风格的代码对我很有帮助,因为它将 Data-lpignore添加到了我所有的输入控件中:

const elements = document.getElementsByTagName("INPUT");
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}

要访问特定的 INPUT 控件,可以写下如下代码:

document.getElementById('userInput').setAttribute("data-lpignore", "true");

或者,你可以按照类名来做:

const elements = document.getElementsByClassName('no-last-pass');
for (let element of elements) {
element.setAttribute("data-lpignore", "true");
}

对于2019年10月最新的 Lastpass 错误版本,这个简单的修复似乎是最好的。

type="search"

你的输入。

Lastpass 例程检查 type属性以确定如何处理其自动填充,而对“ search”的 html5 type则不执行任何操作这个修复有点粗糙,但它只是一行修改,当他们修复他们的错误脚本时,可以很容易地删除它。

注意: 这样做之后,如果某些浏览器选择了 type属性,那么您的输入可能会显示出不同的样式。如果您观察到这一点,您可以通过在您的输入上将特定于浏览器的 CSS 属性 -webkit-appearance-moz-appearance设置为 'none'来防止这种情况发生。

以下是我用来防止 lastpass 塞满剃须刀的方法:

单击工具栏中的活动 LastPass 图标,然后转到 Account Options > Extension Preferences。

在这个屏幕上检查“不要覆盖已经填充的字段”(在底部)

接下来,单击左侧的“高级”。

在这个屏幕上勾选“尊重自动填充 = 关闭: 允许网站禁用自动填充”。

我不需要在 ASP cshtml 表单中执行任何特殊操作,但是在@Html 表单中有一个默认值。编辑盒子。

我希望这对某人有用。我在网上找不到任何关于这个问题的 Razor 特定帮助,所以我想我应该加上这个,因为我通过上面的链接和贡献找到了这个问题的帮助。

对于偶然发现这个问题的人来说——密码字段 autocomplete="new-password"阻止 LastPass 填写密码,而密码与 data-lpignore="true"结合起来就完全禁用了密码

type="hidden" autocomplete="off"

把这个添加到我的输入对我来说很有用。(输入也有 visibility: hidden css)。

2021年11月更新

我注意到所有 LastPass 小部件都包装在 css-1obar3y 类的 div 中。

div.css-1obar3y {
display: none!important;
}

对我来说再合适不过了

截至2022年10月11日,这些都不管用。

我所做的是将以下内容添加到一个假密码字段中

<input id="disable_autofill1" name="disable_autofill1"
style="height:0; width:0; background:transparent;
border:none;padding:0.3px;margin:0;display:block;"
type="password">

这似乎足以最小化该元素在屏幕上的大小(对我来说几乎为0) ,同时仍然不会触发上一次的恶性算法。把它放在真正的密码字段之前。

我相信这个变体可以用来欺骗其他领域,我们不需要自动填充或建议一个新的密码最后通行证。

试试这个:

[data-lastpass-icon-root], [data-lastpass-root] {
display: none !important;
}