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.