這篇要講一下, 使用 VIL 在安全上要注意的事項.
如果您有使用到 VIL 的 PicLens 功能或 Download 功能的話, 一定對這個提示視窗不陌生:
因為 PicLens 及 Download 功能, 都有透過 javascript 呼叫 Mozilla 的 XPCOM 元件, 來存取您電腦上的資源, 例如選擇本機目錄或寫入暫存 Media RSS 供 PicLens 讀取等等. 而要呼叫 XPCOM 元件就得先取得 “UniversalXPConnect” 的權限. 例如程式原始碼中可以看到如下片斷:
function browseOutputFolder(){
unsafeWindow.netscape.security.PrivilegeManager
.enablePrivilege("UniversalXPConnect");
const nsIFilePicker = Components.interfaces
.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, "Album Output Folder",
nsIFilePicker.modeGetFolder);
var rv = fp.show();
if (rv == nsIFilePicker.returnOK) {
_gel('vil_output_path').value = fp.file.path;
}
}
這段程式會呼叫 XPCOM 中的 filepicker 類別, 讓使用者選擇要存放相簿的目錄. 當程式執行到
PrivilegeManager.enablePrivilege(”UniversalXPConnect”);
這一行時, FireFox 就會出現要求使用允許的對話框了.
可是, 為什麼不可以勾選“記住此決定”呢?
假設我們在看無名相簿時使用了PicLens功能, 如果在確認對話框中有勾選“記住此決定”的話, 系統會把以下幾行存放到 profile 目錄下的 pref.js 中:
user_pref("capability.principal.codebase.p0.granted", "UniversalXPConnect");
user_pref("capability.principal.codebase.p0.id", "http://www.wretch.cc/");
user_pref("capability.principal.codebase.p0.subjectName", "");
事實上, 標紅字的部分應該要是執行 enablePrivilege(”UniversalXPConnect”) 的 script 所在的 Domain URL, 但是由於我們是在 Userscript 中執行的, 因此 FireFox 會以“目前的URL”加入記錄, 也就會變成 “http://www.wretch.cc/”. 如此, 以後如果 wretch.cc 中出現了 enablePrivilege(”UniversalXPConnect”) 呼叫, 就會直接被允許了, 形成安全漏洞.
如果您在使用 VIL + PicLens 時, 曾經勾選過“記住此決定”的話, 那麼先關閉FireFox 之後, 把 <profile>/pref.js 中 “capability.principal.codebase….” 相關的設定刪除後再重開 FireFox 即可. 造成大家不便請多多見諒囉! 近期有空的話我會把 VIL 改寫成 FireFox Extension 的, 請大家再耐心等等吧!

請問要在哪把 /pref.js 中的“capability.principal.codebase….”
刪掉