消毒：清理送进来的数据

### 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.