Google Chrome / macOS:密码字段不接受非ASCII字符

时间:2018-05-01 09:21:01

标签: html macos google-chrome passwords usability

  

更新

     

显然,这是OS X版Google Chrome的未解决问题。 It was first reported over seven years ago.如果您碰巧发现自己需要输入包含非ASCII字符的密码,那么您可以选择以下选项:

     
      
  • 在其他地方输入密码,然后通过剪贴板将其传输到密码字段。
  •   
  • 使用开发人员工具将输入类型从password更改为text
  •   
  • 使用其他浏览器
  •   

是否有关于可以输入密码字段的字符的规则?我一直在Mac上试验Chrome,看起来我只能输入“特殊”字符,如果它们可以用一个按键生成(不包括修改键,如 Alt Shift )。

例如,我可以使用单个按键输入版权符号(©)( Alt G ),但带有变音符号(ö)的字母“o”需要两个( Alt U 后跟 O )。在后一种情况下,变音符号不会出现在密码中。在Windows中,似乎这些字符是通过在按 Alt 键的同时键入幻数来获得的,因此这种行为可能存在跨平台差异。也可能存在跨浏览器的差异。

我问的原因是因为我想实现一个带有密码输入字段的注册表单,可以从type="password"切换到type="text"。这允许用户检查字段的内容(假设这样做是安全的),并允许我使用随机密码生成器预先填充该字段,然后用户可以将其复制到确认字段中。但通过这样做,我正在更改此字段接受的字符集。这显然是不可取的;例如,如果我选择Röntgen作为密码,我将永远无法登录(除非登录表单也可以切换)。

那么这里最好的方法是什么?我不想完全禁止特殊字符,但将每个人限制为可打印的ASCII看起来是最简单的选择。

为了说明问题,这是一个包含两个密码字段的表单。一个字段可以切换到普通文本输入。单击按钮以显示两个字段的内容。

function reveal() {
  if ($('#p1').attr('type') == 'password') {
    $('#p1').attr('type', 'text');
    $('#r').html('(Hide)');
  }
  else {
    $('#p1').attr('type', 'password');
    $('#r').html('(Reveal)');
  }
}

function show_passwords() {
  $('#out1').html($('#p1').val());
  $('#out2').html($('#p2').val());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <form onsubmit="return false;">
    <p><label>Password:<br><input type="password" id="p1" name="p1" size="20"></label>
    <small><a id="r" href="#" onclick="reveal()">(Reveal)</a></small></p>
    <p><label>Confirm password:<br><input type="password" id="p2" name="p2" size="20"></label></p>
    <p><button onclick="show_passwords(); return false">Show password field contents</button></p>
  </form>
</div>
<table style="min-width:20em; border: 1px solid #bbb">
  <tr><td style="width:8em">Password:</td><td id="out1"></td></tr>
  <tr><td>Password confirm:</td><td id="out2"></td></tr>
</table>

1 个答案:

答案 0 :(得分:2)

这里有关于铬瑕疵的报告的原作者。有人告诉我在webkit's bugtraq上打开同样的问题(当时Chrome在webkit上运行),webkit dev告诉我Cocoa(OSX UI框架)不允许在密码字段上使用非ASCII字符(而且我'我已经发现这个问题,我的OSX密码不像我的在线服务密码那样具有挑战性)并且Webkit努力模仿本机行为。所以问题不是你的浏览器而是OSX本身。

公平地说,当Chrome切换到Blink时,bugtrack上有一条新消息:

  

这仍然是一个问题。   在最初的WebKit错误上,“决定”在密码控件中允许死键输入并不理想   解决方案,WebKit应该努力遵循Cocoa的行为。

     

现在看来,Blink以两种方式都失败了:死键不像文本字段那样表现,他们这样做   不遵循NSSecureTextField的行为(即表现为密钥不是死键)。

     

Safari 9.0.1中的WebKit 601.2.7按预期运行。 Blink是否应该遵循平台行为,或者愿意   首选支持密码字段中的死键?

但时间已经过去,到目前为止没有任何改变......

我只使用不遵循Cocoa限制的Firefox,并允许在密码字段上使用任何字符。

如果您不想强制用户,只需从生成的密码中跳过非ASCII字符。