/etc/network/interfaces 中的轉義字元
我想確保我傳入該行
wpa-ssid "abc"
的任何字元串/etc/network/interfaces
都不會用於中斷配置。我在手冊中可以找到的只是
\
可以在一行的末尾使用以繼續下一行。但是
\"
在一條線的中間呢?我擔心的是SSID之類的
A" up rm -rf /\
是否有任何通用編碼可用於 SSID 欄位中的任意字元?
在 Debian
/etc/network/interfaces
(或使用 Debian 的 ifupdown 實用程序的任何其他發行版)中,刪除了反斜杠換行符序列,並且反斜杠在其他任何地方都不是特殊的。雙引號字元也不特殊。#
如果字元是(非繼續)行上的第一個非空白字元,則該字元開始註釋。空字節被視為換行符(我認為 - 解析器使用 C 字元串並且對空字節沒有特殊處理,因此它們可能會導致額外的惡作劇)。配置行採用選項名稱後跟一個值的形式,由空格分隔。忽略前導和尾隨空格。一些內置選項進一步將行解析為單詞;選項的值
iface
總是執行到行尾。例如,線
wpa-ssid "a b" "cd"
將選項
wpa-ssid
設置為 12 個字元的字元串"a b" "cd"
(保留內部空格)。WPA Supplicant 的 ifupdown 腳本在配置字元串的開頭和結尾去除雙引號,
wpa-ssid
上面的行相當於wpa-ssid a b" "cd
. 這樣,您可以在 SSID 中包含前導和尾隨空格。我在 WPA Supplicant ifupdown 腳本中找不到引用問題,因此看起來 ifupdown 生成的任何內容都是安全的。
因此,您可以允許將任何字元串作為 SSID 注入到
/etc/network/interfaces
中,前提是它不包含任何換行符或空字節。在字元串周圍添加雙引號(如果不這樣做,帶有前導或尾隨空格的 SSID,或者以 結尾\
,或者以 開頭或結尾的SSID"
將被損壞)。