君は幅ゼロスペースを知っているか!?
先日,久々にあるWebサービスにログインしようとすると一向にログインできない. 何故だ. 普段使っているパスワードマネージャから入力されたユーザ名とパスワードを何度も確認する. 間違いは見当たらない. さらにパスワードを再発行しようにも,再発行の案内メールが届かない・・・・. 何故だ.
サポートに電話
サポートに電話すると手で再度,入力してくれと頼まれる. すると・・・・あ,再発行のメールが届いた!!!! え・・・なんで? サポートのオペレータになんか私のミスのようですと,謝罪し,再発行の手続きに進む前に,何故,手入力だと再発行の手続きメールが送信されたのかを検証するため,再度,パスワードマネージャから入力されたテキストと,手入力されたテキストを見返してみる.
「・・・・・・・・・・・」
まったく同じだ. 一文字も間違いはない. データに差違はない.
このテキストファイルにデータをコピーし,精査する. やはり間違いはない. おかしい・・・・そして,abc@hoge.comを検索してみる. え・・・・・当たらない・・・検索されない. 見た目はまったく同じなのに・・・・・. なんなんだ,これは・・・
文字コード U+200B〜衝撃の幅ゼロスペース
そこで,テキストファイルをバイナリエディタでデータを観察してみる. 0x61(a), 0x62(b), 0x63(c)…ん? なんだ,0xE2 0x80 0x8B,この余計なデータは・・・・?次は@マークの0x40じゃないのか・・・・・? テキストエディタでは見えないが,データとして,そこには確実に文字が存在していた. この文字コードを検索にかけてみると・・・・・!!!!
コンピュータにおいて、ノーブレークスペース (no-break space, non-breaking space, NBSP) は、スペースの前および後の位置での自動的な改行(行の折り返し)を防ぐ特殊なスペースである。
Wikipedia - ノーブレークスペース
この文字コードは,“ZERO WIDTH NO-BREAK SPACE”と呼ばれる幅がないスペースだったのだ. つまり,パスワードマネージャのユーザ名のところにこの“ZERO WIDTH NO-BREAK SPACE”が混入していたために,一切ログインもできず,さらにパスワードの再発行のメールも届かなかったのである.
意味がわからない・・・・.一体どこで混入したのか・・・・そして・・・・
こんなわけわかんねー文字作ってんじゃねーよ!!!!!!!!!!!!!!!!!!!!!!!!!!