私が行に渡した文字列が設定を破るために使用できwpa-ssid "abc"
ないことを確認したいと思います。/etc/network/interfaces
マニュアルで見つけることができるのは、\
1行の終わりから次の行に進むために使用できることです。
\"
しかし、行の途中にある場合はどうですか?
私が気になるのはSSIDとかそういうことです。
A"
up rm -rf /\
SSIDフィールドの任意の文字に使用できる汎用エンコーディングはありますか?
答え1
Debian /etc/network/interfaces
(またはDebianのifupdownユーティリティを使用する他のディストリビューション)では、バックスラッシュ改行シーケンスが削除され、バックスラッシュは他の場所では特別ではありません。二重引用符文字も特別ではありません。この文字は、(非連続)行で空白ではなく最初の文字の場合は#
コメントを開始します。 Nullバイトは改行文字として扱われます(パーサーはC文字列を使用し、Nullバイトを特に処理しないため、追加の問題が発生する可能性があると思います)。
構成行は、オプション名の後にスペースで区切られた値の形式を取ります。先行および末尾のスペースは無視されます。一部の組み込みオプションは、行を単語としてさらに解析し、常にiface
行の最後まで実行されます。
たとえば、行
wpa-ssid "a b" "cd"
オプションをwpa-ssid
12文字の文字列に設定します"a b" "cd"
(内部スペースを保持)。
WPA Supplicantのifupdownスクリプトは、構成文字列の先頭と末尾から二重引用符を削除します。wpa-ssid
上記の行はと同じですwpa-ssid a b" "cd
。これにより、SSIDに前後のスペースを含めることができます。
WPA アプリケーション ifupdown スクリプトで参照の問題が見つからないため、ifupdown が生成するすべてが安全なようです。
/etc/network/interfaces
したがって、改行またはnullバイトが含まれていない限り、すべての文字列をSSIDとして挿入することができます。文字列の周りに二重引用符を追加します(そうしないと、\
先頭または末尾のスペース、次に終わる、または次に始まるまたは終わるSSIDが"
壊れます)。
答え2
このSO Q&Aのタイトルは次のとおりです。有効なSSIDとパスワードを定義する標準はありますか?あなたの質問に答えます。
抜粋
802.11-2007仕様セクション7.3.2.1(http://standards.ieee.org/getieee802/download/802.11-2007.pdf) は SSID を定義します。
有効なSSIDは0〜32オクテットで、任意のコンテンツが含まれます。長さゼロのSSIDは、ワイルドカードSSIDを示します(プローブ要求フレームなど)。
SSIDに関連した文字セットはありません。 32バイトのNULバイト文字列が有効なSSIDです。
これは次のことを意味します。
- 汎用SSID(strcpy()など)を操作するときは、通常の文字列関数を使用しないでください。
- たとえば、SSIDをディスクに書き込むときにSSIDが印刷可能であると仮定しないでください。
SO質問に対する回答の説明もあります。
標準の更新版があります(http://standards.ieee.org/getieee802/download/802.11-2012.pdf)、
SSIDEncoding
フィールドを定義します。UNSPECIFIED
(任意のデータの場合)またはにすることができますUTF8
。
そこで最新の基準を参考にして、その基準に応じて合法的に処理できるようにします。
また何ですか?
また、一部の形式のURLエンコード機能(SSIDと連携しているように見える機能)を使用してユーザー入力を正規化するか、単に違法文字を削除してその文字列をこのファイルに書き込むことで、自分自身を保護する傾向があります。以前はまったく使用されていませんでした。
変なキャラクター?
このファイルに関連する奇妙な/特殊文字に見られる唯一の問題は、interfaces
debian-installerに対して発生したこの種のバグです。
debian-installerは私のワイヤレスネットワーク情報を要求し、それをうまく使用してネットワークにワイヤレスで接続しました。また、私のワイヤレスネットワーク情報を/etc/network/interfacesに記録します。しかし、私が入力したWPAキーには少なくとも1つの特殊文字が含まれており、debian-installerは/ etc / network / interfacesから特殊文字をエスケープまたは引用しませんでした。その結果、再起動時にシステムがワイヤレスネットワークに再接続しようとすると(失敗)、起動プロセス中に長時間停止します。 /etc/network/interfacesにリストされているWPAキーを参照して問題を解決しました。キーに特殊文字が含まれていると自動的に発生します。
次のエラーもあります。そのうちの1つはSSID内のスペースに関連し、他のエラーはパスワードに関連しています。
- 空白のあるSSIDはエスケープされます。
- WPAパスワードはスペースを避けてはいけませんが、スペースをエスケープします。
- [ベータ 1.1] xbmc の Wi-Fi 設定が SSID の空白と機能しません。
どちらの場合も、文字列を二重引用符で囲むことで、両方の値を保護するのに十分です。
他の例
公式文書
公式文書を注意深く読んでみると、次のような内容が見つかりました。
公式文書は次の例を示しています。
ap_scan=2
network={
ssid="test adhoc"
mode=1
frequency=2412
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="passphrase"
}
したがって、正しく引用されている限り、スペースは許可されているようです。ツールにスペースを含むSSIDを提供する方法を説明する次の例もありますiwconfig
。
作成/登録するネットワークの名前(ssid)を追加します。名前にスペースが含まれている場合は、単一引用符を使用してください。
$ sudo iwconfig eth1 essid 'name'
ネットワークコレクター
Debianのように見えるこの例を見つけたので、この例はあなたの場合には効果があるかもしれませんが、確かに言うのは難しいです。違法文字を避けるためにURIエンコード方法を公開する方法の例を示すため、これについて説明しました。
抜粋
例4「ESSIDのスペース」、WPAキーuiopzxcvを使用したessid 'Hopstock Gjestenett'ブロードキャスト
ESSIDにスペースを使用しないでください。この場合、 encodeURI('Hopstock Gjestenett') を使用して次の実行方法を取得します。
wpa-ssid=Hopstock%20Gjestenett wpa-psk=uiopzxcv
したがって、.SSIDを使用してSSIDに表示されるスペースをエンコードできます%20
。
SSID
詳しく調査した結果、Wikipediaのページでこのレビューが見つかりました。サービスセット(802.11ネットワーク)。
各BSSまたはESSは、サービスセット識別子(SSID)(1〜32バイト文字列)で識別されます。これは通常、人間が読める文字列なので、「ネットワーク名」とも呼ばれます。6IBSSでは、SSIDはネットワークを起動するクライアントデバイスによって選択され、ネットワークのメンバーであるすべてのデバイスは疑似ランダムな順序でSSIDブロードキャストを実行します。
このレビューはBlackhat EU 2013のプレゼンテーションでサポートされています。悪意のあるSSID(サービスセット識別子)を使用した実際の攻撃。
抜粋
- SSIDに使用できる文字には明示的な制限はありません(IEEE Std 802.11™-2012)。
- 一部の製品ベースの制限
- 一部の文字制限(ASCIIのみ)
- Unicode
したがって、技術的にはすべての文字がSSIDで許可され、さまざまな実装(Windows XP、Windows 7など)やさまざまなLinuxバージョンではSSIDの文字サブセットを許可/許可しません。