Tôi đang cố gắng xây dựng một dịch vụ web bằng Ruby on Rails. Người dùng tự xác thực thông qua Xác thực cơ bản HTTP. Tôi muốn cho phép bất kỳ ký tự UTF-8 hợp lệ nào trong tên người dùng và mật khẩu.Ký tự UTF-8 bị xáo trộn trong tên người dùng Auth HTTP cơ bản
Vấn đề là trình duyệt mang các ký tự mangling trong thông tin xác thực cơ bản trước khi gửi chúng đến dịch vụ của tôi. Để kiểm tra, tôi sử dụng tên người dùng của mình (không biết ý nghĩa của nó là gì - AFAIK là một số nhân vật ngẫu nhiên mà nhân viên QA của chúng tôi đã đưa ra - hãy tha thứ cho tôi nếu nó bằng cách nào đó xúc phạm).
Nếu tôi coi đó là một chuỗi và làm username.unpack ("h *") để chuyển nó sang hex, tôi nhận được: '3e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a83e28ba3e28fb3e28ba3e38a8' Đó có vẻ đúng cho 32 kanji ký tự (3 byte/6 hex chữ số cho mỗi).
Nếu tôi làm như vậy với tên người dùng truy cập qua xác thực HTTP cơ bản, tôi nhận được: 'bafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaacbafbbaac'. Nó rõ ràng là ngắn hơn nhiều. Sử dụng các plugin trình duyệt Firefox Live HTTP Headers, đây là tiêu đề thực tế mà đang được gửi:
Authorization: Basic q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o6q7+ryqu/q8qrv6vKq7+ryqu/q8qrv6vKq7+ryqu/q8o=
Trông giống như đó là bafbba ... 'chuỗi, với Nibbles cao và thấp hoán đổi (ít nhất là khi tôi dán nó vào Emacs, cơ sở 64 giải mã, sau đó chuyển sang chế độ hexl). Đó có thể là một đại diện UTF16 của tên người dùng, nhưng tôi đã không nhận được bất cứ điều gì để hiển thị nó như bất cứ điều gì nhưng vô nghĩa.
Đường ray đang đặt tiêu đề loại nội dung thành UTF-8, do đó trình duyệt sẽ gửi trong mã hóa đó. Tôi nhận được dữ liệu chính xác để gửi biểu mẫu.
Vấn đề xảy ra trong cả Firefox 3.0.8 và IE 7.
... Vì vậy, có một số bộ lọc tuyệt vời để nhận các trình duyệt web để gửi UTF-8 ký tự thông qua HTTP Basic Auth? Tôi có xử lý mọi thứ sai trên đầu nhận không? Có phải HTTP Basic Auth không hoạt động với các ký tự không phải ASCII?
Thông tin bên lề: "Ký tự ngẫu nhiên" không gây khó chịu. Họ là người Nhật, và nói "katakana" (8 lần) trong kịch bản Katakana http://en.wikipedia.org/wiki/Katakana thường được sử dụng để đánh vần các từ và âm thanh không phải tiếng Nhật. (Đó là lẻ, bởi vì "katakana" * là * một từ tiếng Nhật vì vậy thường không phải là viết tắt trong katakana :-) – bignose
Phụ lục đố: Tôi đã thấy nó được viết bằng katakana rất nhiều. Ban đầu tôi đặt nó xuống cho những người cố gắng để được thơ mộng, nhưng tôi chỉ nhìn nó trong Jisho và nó nói rằng nó "thường được viết bằng kana". – Trejkaz