You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor中阻止Google密码管理器将自动填充密码显示为明文

解决Chrome密码管理器导致Blazor密码框明文显示的问题

这个问题是Chrome密码管理器的已知兼容性问题:当用户登录Google账号并使用自动生成密码功能时,浏览器会错误地将确认密码输入框的type属性从password改为text,导致密码明文暴露。以下是几个可行的解决办法:

1. 强制重置输入框的type属性

通过Blazor的焦点离开事件,强制将输入框的type属性重置为password:

@inject IJSRuntime JSRuntime

@page "/"
<form>
    <div class="form-group">
        <label for="password-input">Password</label>
        <input type="password" class="form-control" id="password-input" @onfocusout="() => ResetPasswordType("password-input")">
    </div>
    <div class="form-group">
        <label for="confirm-password">Confirm password</label>
        <input type="password" class="form-control" id="confirm-password" @onfocusout="() => ResetPasswordType("confirm-password")">
    </div>
</form>

@code {
    private async Task ResetPasswordType(string elementId)
    {
        await JSRuntime.InvokeVoidAsync("eval", $"document.getElementById('{elementId}').type = 'password';");
    }
}

2. 使用Blazor内置InputText组件

Blazor的内置表单组件能更稳定地维护输入框属性,避免浏览器篡改:

@page "/"
<EditForm Model="@registerModel">
    <div class="form-group">
        <label>Password</label>
        <InputText type="password" @bind-Value="@registerModel.Password" class="form-control" />
    </div>
    <div class="form-group">
        <label>Confirm password</label>
        <InputText type="password" @bind-Value="@registerModel.ConfirmPassword" class="form-control" />
    </div>
</EditForm>

@code {
    private RegisterModel registerModel = new();

    public class RegisterModel
    {
        public string Password { get; set; }
        public string ConfirmPassword { get; set; }
    }
}

3. 禁用浏览器密码管理器干预(需权衡体验)

通过添加autocomplete属性,告诉浏览器不要对该表单进行自动填充或密码生成操作(会影响用户使用密码管理器的体验,需谨慎选择):

@page "/"
<form autocomplete="off">
    <div class="form-group">
        <label for="password-input">Password</label>
        <input type="password" class="form-control" id="password-input" autocomplete="new-password">
    </div>
    <div class="form-group">
        <label for="confirm-password">Confirm password</label>
        <input type="password" class="form-control" id="confirm-password" autocomplete="new-password">
    </div>
</form>

内容的提问来源于stack exchange,提问作者Milo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:22:10