Movable Type 使用手冊:消毒:清理送進來的資料

« 目錄


消毒:清理送進來的資料

請注意:以下的功能祇有當妳在網誌組態偏好中開啟迴響允許 HTML 選項後纔會生效。

當讀者送出資料到妳的網站時,這些資料其實並沒有被特別信任如果妳允許在迴響裡使用 HTML 時,像是讀者可以送出帶有惡意的 HTML 或 Javascript 或 PHP 腳本等。這個時候這些將可以從妳的伺服器上的 cookie 裡讀取隱私檔案,然後做任何事。

為了要保護妳的站台, Movable Type 可以清理(『消毒』)任何由讀者送到妳的站台上的資料。這包含了任何的迴響資料和引用資料。這個清裡的動作會除去任何可能會危害妳的站台安全的碼(像是 HTML 或其他的)。消毒程序祇會允許某些 HTML 標籤 -- 至於其他的標籤和所有的執行及腳本指令(像是 PHP 、 JSP 和 Javascript )則都會被除掉。

預設被允許使用的標籤和屬性集合為: a hrefbbrpstrongemulliblockquote 。妳可以用 mt.cfgGlobalSanitizeSpec 設定來覆寫這個整體設定;同時妳也可以在網誌組態裡依據個別網誌分開覆寫這個設定。請注意:除非妳知道妳在做甚麼,否則我們強力建議妳在此保留預設值。

另一個消毒程序的功能是它可以幫妳把還開著的的標籤給關上。舉例來說,如果有個讀者在妳的站台上開了一個 <b> 標籤,卻又忘記把它給關上,那麼消毒程序將會補上一個 </b> 標籤。

預設用法

在預設的情況下,消毒功能遇到下列這些標籤時就會自動地被開啟:

這意味著妳並不需要另外再修改妳的模版。如果妳想要在這些標籤中的某一個關閉消毒功能的話,妳可以使用 sanitize 屬性:

<$MTPingTitle sanitize="0"$>

推翻預設值

當妳想推翻預設的消毒規格時,妳得先確定妳這麼做真的有個好理由。妳同時也該確定妳理解消毒規格裡的格式;關於這個,我們將在後面加以描述。

消毒規格包含著以逗號分隔的 HTML 標籤。對每一個標籤來說,妳同時也得列出所有妳允許使用的屬性,這些屬性間則以空白分隔。以下是一些範例:

這個範例會允許帶著 href 屬性的 a 標籤,另外還有 b 標籤:

a href,b

這個範例會允許 p 標籤和 br 標籤:

p,br/

請注意這個範例裡, br/ 標籤中的 / 部分。這個部分不能省略,這和前面提過的標籤關閉功能有關:如果分析器祇有看到一個打開的 <br> 標籤的話,它就會以為在消毒文字結尾的地方還需要一個關閉標籤。在標籤名稱後面加上 / 會讓分析器知道,這個標籤並不需要結束標籤。

請注意妳一定得要指定標籤的特定屬性,除非妳希望所有的屬性都被去除。舉例來說,如果妳允許了 a 標籤的話,妳也會想要允許這個標籤裡的 href 屬性,否則下列的 HTML :

<a href="http://www.foo.com/">

就會被轉換成這樣:

<a>

而這決不是妳所想要有的結果。

如果妳想要讓某個屬性無論在那個 HTML 標籤裡都可以用的話,妳可以用一個 * 來當作標籤名稱,後面再跟著屬性清單。舉例來說:

br/,p,blockquote,* style

這麼一來下列的東西就都可以用:

<br style="..." />
<p style="..." />
<blockquote style="...">

請注意妳一定要明確地列出任何妳想要囊括的標籤* 祇會允許任何列在那些標籤裡的屬性而已。


Copyright © 2001-2003 Six Apart. All Rights Reserved.