NoScript

**NoScript** 是一個為 Mozilla Firefox 和 Mozilla Application Suite 網頁瀏覽器 （諸如 Flock、SeaMonkey 等） 所開發的自由的擴充功能（Add-ons）。NoScript 以白名單選擇性執行 JavaScript、Java、Flash、Sliverlight 以及其它外掛程式和指令碼內容。

## 特點

### 安全和使用方法

在安裝之後，JavaScript、Java、Flash、Sliverlight 和其它可執行內容都會被 Firefox 預設阻止。使用者可以手動允許這些內容。
NoScript 會在 Firefox 中占據一個工具列圖示或是一個狀態列圖示，並顯示正在瀏覽的頁面上每個站點的內容被阻止或允許的情況，同時也可以修改之前阻止或允許的內容。

### 站點匹配和白名單

對於每個頁面，可以選擇允許特定的位址，特定的域名或是根域名並執行它的內容。同時，允許一個域名之後（例如，mozilla.org），它的所有二級域名都會被預設允許（例如 www.mozilla.org, addons.mozilla.org 等等）而且與協定無關（例如 HTTP 和 HTTPS）。而允許一個位址之後（協定：主機 例如 www.mozilla.org），它的所有子目錄都會被允許 （例如 www.mozilla.org/firefox 和 www.mozilla.org/thunderbird），此時它的根域名和以及其它二級域名不會被允許。因此，mozilla.org 和 addons.mozilla.org 就不會被自動允許。

### 黑名單

頁面也可以在 NoScript 中被列入黑名單。把一個頁面列入黑名單不僅會阻止執行指令碼內容，同時還會去掉手動執行這些內容的選項。即使安全設定低於預設值，NoScript 還是可以阻擋一些網頁攻擊，例如 DNS 重新綁定攻擊。

### 反 XSS 防護

2007 年 4 月 11 日，NoScript 1.1.4.7 版公開發布，新增了一個客戶端的保護，針對類型 0 和類型 1 的 XSS 攻擊。一旦一個頁面試圖將 HTML 或是 JavaScript 代碼插入另一個頁面，NoScript 就會過濾掉有害請求。

### 強制 HTTPS 轉換

2008 年 9 月 15 日，NoScript 1.8.1 版公開發布，使得使用者可以強制某些網站必須通過 https 存取，增加安全性。此外 NoScript 也可以強制 https 網站把 cookies 加密來阻止 cookies 劫持。 
2009 年 9 月 23 日，NoScript 1.9.8.9 版增加了對 HSTS 的支援。這一功能使得使用者在存取支援的網站（例如，PayPal）的時候自動只通過 HTTPS 存取，以防止中間人攻擊。

### 預設阻止一切

NoScript 的預設行為是阻止所有不在白名單中的指令碼。這可能使大量依賴於 JavaScript 技術，例如 AJAX 的頁面無法正常工作。不熟悉的使用者也許會覺得相比起增加的安全保護而付出的麻煩不值得。

但同時 NoScript 也支援一個可選的黑名單模式：使用者可以選擇全域啟用 JavaScript 然後禁止他們不信任的站點。即便如此組態，NoScript 仍然能在很大程度上增強安全性，由於仍然具有 XSS、CSRF 和點擊劫持等防護功能。

### 內建的白名單

截至 2009 年 5 月 (2009-05), NoScript 的白名單預設包含了擴充功能作者的部分域名，一些 Google 的域名（包括一個必要的用於顯示 Google Adsense 廣告的域名），雅虎以及微軟，由於這些使用了 AJAX 的 Web 郵件服務可能是某些使用者唯一熟悉的使用郵件方式，如果不這樣做，這些使用者就會在安裝 NoScript 之後無意地把他們自己鎖住。這個白名單是可以修改的。

## 獎項

NoScript 被 PC World 雜誌評為 2006 年百大最佳產品之一。

## 評論

### 和 Adblock Plus 的爭端

2009 年 5 月 1 日，Firefox 擴充功能 Adblock Plus 的作者 Wladimir Palant，宣布一周之前的 NoScript 1.9.2 版開始妨礙 Adblock Plus 正常工作。NoScript 會在未經 Adblock Plus 和使用者允許的情況下解析並顯示贊助商頁面。Palant 說 NoScript 使用了代碼混淆來逃避十六進位代碼層面對這個修改的檢測。幾乎同時，Mozilla 因此次事件決定修改社群準則。4 月 30 日，NoScript 升級到 1.9.2.3，把傳說中的代碼混淆改為了一個使用者可見的特性，即 NoScript 在 Adblock Plus 的過濾規則中將自己的網站設定為白名單。Wladimir Palant 指出這個過濾規則即便被使用者刪除也會在每次啟動的時候自動添加回去，不過這看起來似乎只是個無意的 Bug，因為白名單同時也可以被永久禁止或是如 NoScript FAQ 所說，被使用者自己的過濾規則覆蓋。幾小時之後，2009 年 5 月 2 日，自動更新的 NoScript 1.9.2.6 版徹底移除了這一白名單，並在發行記錄中對沒有在使用者事先允許的情況下修改 Adblock Plus 功能的行為作出公開道歉。2009 年 5 月 4 日，在部落格上一篇長文中，NoScript 的作者 Giorgio Maone 以個人身分對最初含糊的說法表達了歉意，認識到這是破壞了信任關係並對此表示後悔。他同時解釋 NoScript 添加的 Adblock Plus 白名單是對 EasyList 反常性「攻擊」的對抗，這些攻擊針對 Manoe 的網站，並幾乎破壞了頁面所有的動態功能，甚至是安裝 NoScript 軟體套件的連結。

### NoScript 網站和 Ghostery 擴充功能的衝突

2009 年 5 月 1 日以及 2009 年 5 月 3 日在討論 NoScript 對 Adblock Plus 的修改時，有人在 NoScript 支援論壇中指出 NoScript 官網上有一個 CSS 規則不停讓 Ghostery 這個 Mozilla 擴充功能彈出提示，表示網頁上有奇怪而隱蔽的 "bug"。Ghostery 也會提示使用者 Manoe 網站上 Google Adsense 的使用。Manoe 在回應中宣稱他的 CSS 沒有做出這些，Ghostery 的提示是由於其自身的技術問題，同時這些提示看起來很糟糕而且妨礙了網頁真實效果的展示。在之後的聲明中 Manoe 又特別批評這些提示擋住了了捐款按鈕和使用許可的顯示並且表示他的 CSS 沒有阻止 Ghostery 的正常工作。

大多數人則認為 Manoe 的 CSS 檔案包含了足夠多的統計代碼，Ghostery 的判斷並沒有錯。有人指出 Ghostery 在其原始狀態的提示並沒有擋住 Manoe 的捐款按鈕，並在幾秒鐘之後就消失了。另外，使用者們指出 Manoe 的一行樣式使得 Ghostery 無法提供一個網頁 bug 的資訊，並認為總體上來說這是 Manoe 自己的問題。但 Manoe 仍堅稱 Ghostery 顯示資訊的方式不合適和過度敏感而導致兩個擴充功能出現了矛盾。

這件事的討論擴充功能到了第三方站點，有些人謊稱干擾了 Ghostery 工作的是 NoScript 擴充功能而不是 Manoe 的站點。Ghostery 的作者 David Cancel（頁面存檔備份，存於網際網路檔案館）原先發表了一些過激言論但隨後修正了。

2009 年 5 月 6 日，在此事的激烈討論平息之後，Maone 公開表示他改變了自己的觀點，為此他修改了自己站點的 CSS。Ghostery 的提示框不再被隱藏而是向頁面中部輕微移動了一些，以免擋住捐款按鈕或是許可資訊。

## 參見

* GNU LibreJS
* JavaScript 陷阱

## 參考文獻

## 外部連結

* NoScript 官方網站（頁面存檔備份，存於網際網路檔案館） （英文）
* Mozilla Add-ons 網站上的 NoScript 頁面（頁面存檔備份，存於網際網路檔案館）