請注意:以下的功能祇有當妳在網誌組態偏好中開啟迴響允許 HTML 選項後纔會生效。
當讀者送出資料到妳的網站時,這些資料其實並沒有被特別信任如果妳允許在迴響裡使用 HTML 時,像是讀者可以送出帶有惡意的 HTML 或 Javascript 或 PHP 腳本等。這個時候這些將可以從妳的伺服器上的 cookie 裡讀取隱私檔案,然後做任何事。
為了要保護妳的站台, Movable Type 可以清理(『消毒』)任何由讀者送到妳的站台上的資料。這包含了任何的迴響資料和引用資料。這個清裡的動作會除去任何可能會危害妳的站台安全的碼(像是 HTML 或其他的)。消毒程序祇會允許某些 HTML 標籤 -- 至於其他的標籤和所有的執行及腳本指令(像是 PHP 、 JSP 和 Javascript )則都會被除掉。
預設被允許使用的標籤和屬性集合為: a href
、 b
、 br
、 p
、 strong
、 em
、 ul
、 li
和 blockquote
。妳可以用 mt.cfg 的 GlobalSanitizeSpec 設定來覆寫這個整體設定;同時妳也可以在網誌組態裡依據個別網誌分開覆寫這個設定。請注意:除非妳知道妳在做甚麼,否則我們強力建議妳在此保留預設值。
另一個消毒程序的功能是它可以幫妳把還開著的的標籤給關上。舉例來說,如果有個讀者在妳的站台上開了一個 <b>
標籤,卻又忘記把它給關上,那麼消毒程序將會補上一個 </b>
標籤。
在預設的情況下,消毒功能遇到下列這些標籤時就會自動地被開啟:
<$MTCommentAuthor$>
<$MTCommentEmail$>
<$MTCommentURL$>
<$MTCommentBody$>
<$MTPingTitle$>
<$MTPingURL$>
<$MTPingBlogName$>
<$MTPingExcerpt$>
這意味著妳並不需要另外再修改妳的模版。如果妳想要在這些標籤中的某一個關閉消毒功能的話,妳可以使用 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="...">
請注意妳一定要明確地列出任何妳想要囊括的標籤; *
祇會允許任何列在那些標籤裡的屬性而已。