Nejspolehlivější "oprava" by bylo vyloučit z povolených znaků pro SSID všechna svinstva jako například emoji a podobně. Jen to zbytečně rozšiřuje plochu cíle pro případný útok. Na straně AP (špatně kontroluje délku pro emoji atd.) i na straně připojivaného zařízení (např. špatně nekontroluje délku a snaží se to navíc i spustit).
Ne znaků, ale oktetů. Z oktetů na znaky to musíte převést nějakým kódováním, které ale myslím pro SSID standardizované není. U viditelných SSID to vlastně nevadí, maximálně uvidíte něco divného. U skrytých SSID může být problém napsat to, co někde vidíte. Ale předpokládám, že reálně se to všude interpretuje jako UTF-8. Což bohužel zase vede na neplatné kombinace oktetů, které jsou validní SSID ale nevalidní UTF-8.
Stačí úplně jednoduchý kód: je-li řetězec platné UTF-8 (což zahrnuje i ASCII), zobraz ho jako UTF-8, jinak ho zobraz třeba hexadecimálně.
To mi připomíná, v nové verzi standardu může AP označit, že SSID je v UTF-8, ale to je podle mě chyba, protože to skrývá past: svádí to, aby klient neověřoval, jestli je SSID opravdu platné UTF-8 a rovnou ho zobrazil.
Ano, ale to už jsou právě ty výjimky, které musí kód řešit. Na které se často zapomíná a o kterých lidé často ani netuší, že je mají řešit. Kolik programátorů asi napadne, když se dozví, že SSID je v UTF-8, že mohou také dostat neplatnou sekvenci bajtů? Kolik programátorů vůbec ví, že ne každá posloupnost bajtů je platná sekvence UTF-8?
Ano, právě na to je potřeba myslet při návrhu standardů, že implementaci pak budou dělat lidé a lidé dělají chyby. Tj. nedávat tam zbytečné označení, že SSID je v UTF-8, když to v praxi nic nepřinese (stejně je potřeba ověřovat, zda je to platné UTF-8) a hrozí, že se na to programátoři nachytají a způsobí bezpečnostní problém.
Na druhou stranu, SSID je něco, co se zobrazuje uživateli, někdy to uživatel dokonce musí odněkud opsat. Zobrazovat to jako oktety, třeba hexadecimálně, není zrovna uživatelsky přívětivé. Použít UTF-8 je asi nejméně špatné řešení. Buďme rádi, že je aspoň dodatečně určeno, že ty oktety mají být interpretovány jako UTF-8. Je pořád spousta případ, kdy kódování textu určené není a každý si to může interpretovat, jak chce…