HTTP基本身份验证失败,密码为非iso-8859-1字符

时间:2016-01-08 11:15:30

标签: google-chrome firefox safari basic-authentication windows-1252

我的基本身份验证有问题。服务器是 Apache httpd服务器2.2.12 ,我创建了一个受基本身份验证保护的位置:

<Location /basictest>
    AuthType Basic
    AuthName "BasicAuth di Test"
    AuthBasicProvider file
    AuthUserFile /etc/apache2/basictest.passwords
    Require valid-user
</Location>

在密码文件/etc/apache2/basictest.passwords中我定义了两个:

用户:密码

pippo:pippo£
kanji:誰か確認上記これらのフ

如果我使用 Chrome(47.x)测试访问权限一切正常,但是如果我使用 Firefox(43.x) iOS上的Safari Web浏览器(Safari / 601.1)验证失败,因为user:password的base64编码使用了错误的字符集(Windows-1252)!在Chrome测试用例中,使用的字符集是UTF-8

Chrome ---------> cGlwcG86cGlwcG/Cow==
Safari/FireFox -> cGlwcG86cGlwcG+j

在此期间我们等待https://tools.ietf.org/html/rfc7617实施,我可以强制FireFox和Safari在base64加密时使用UTF-8作为Chrome的行为吗?

1 个答案:

答案 0 :(得分:0)

我不确定它是否是一个错误,因为浏览器使用不同的编码/字符。

无论如何已经使用UTF-8:

 - Opera 10  
 - Chrome

使用不同的编码但是req参数没有问题(因此ASCII仍然可以):

Firefox 1-4  (UTF-16 lower bytes)
Safari 4-5   (ISO-8859-1)
IE:Mac 5     (MacRoman)
IE 5-8       (CP_ACP)
IEMobile 6-8 (CP_ACP)
Netscape 4   (CP_ACP)
Opera 5      (CP_ACP)

https://bugzilla.mozilla.org/show_bug.cgi?id=41489#c90

关于他的疑惑。 基本身份验证不支持非ISO-8859-1字符。

你可以尝试将.htaccess中的字符转换为UTF8,未经测试,不确定它是否有效。 How to change the default encoding to UTF-8 for Apache?

我建议使用其他身份验证方法或创建登录页面。

如果其他同事有更好的解决方案,请告诉我。