消毒：清理送進來的資料

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

« 目錄

- 消毒：清理送進來的資料

- 預設用法
- 推翻預設值

# 消毒：清理送進來的資料

請注意：以下的功能祇有當妳在網誌組態偏好中開啟迴響允許 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="...">

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

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