聚焦:输入格式和过滤器
你可能已经注意到在节点和区块主体区域中有个有趣的属性叫“输入格式(Input format)”,我们此前一直对它视而不见,如图2-54。选定什么样的输入格式将影响内容的显示。输入格式事关Drupal的安全,所以一定要搞懂 它。输入格式会对你发布的内容进行“扫面”并且在浏览器显示之前完成HTML格式化修改。每一内容都必然关联一种输入格式,一对一,因此Drupal总是 能够知道自己要找的东西以及要去修改的东西。
图2-54,节点中的输入格式

注意,任一在管理后台被设为“默认”的输入格式,则所有用户都能应用,包括匿名用户。一般情况下,这个默认的输入格式通常设定为Filtered HTML
图2-54中,有两个选项,Filtered HTML和Full HTML。这是Drupal核心中的两个默认输入格式。每个站可以设定好多种输入格式;或者由某些模块提供,如PHP过滤器,或者你也可以自定义格式。输 入格式受角色限制,所以你可以允许所有人应用一种输入格式如Filtered HTML,但是同时又把某一输入格式如Full HTML仅允许你信赖的用户,如管理员等来应用。

如果有用户跟你说某节点的编辑标签神秘失踪了,检查一下它的输入格式。Drupal禁止用户对自己无权使用的输入格式内容进行编辑。这种特性可用来防止一些无权用户来编辑一些页面。
输入格式由过滤器组成,图2-55展示了Filtered HTML输入格式所包含的全部过滤器。过滤器才是真正起作用的,输入格式只不过是过滤器的组合。过滤器改变内容并且以适当的HTML输出显示。如 “Line break converter”(换行器)能将新的一行(回车)插入<br />和<p>标签,“URL filter”(链接过滤器)能将文本网络地址如http://www.verynic.com 转换成可点击链接,如<a href="http://www.verynic.com">http://www.verynic.com</a>。过滤器可以对 内容作很多有用或者有意思的事情(如Pirate module海盗模块[http://drupal.org/project/pirate]可以将文字变成海盗语,海盗语估计就是类似我们现在的为逃避 信息监控采用的暗语),但是一定要注意网站的安全。人可以通过浏览器的输入框做各种坏事。使用过滤器就是专门用来对付这些不坏好意的家伙,如HTML过滤 器就可以让你的网站避免被黑客攻击。

所有过滤器中,数“HTML filter”最为重要,它能够帮你剔除各类危险HTML标签,保护你的站点避免各种见不得人的攻击。攻击方式有通过浏览器页面置入各种恶意 Javascript或其他可执行代码。这个过滤器默认情况下仅在Filtered HTML输入格式中启用。请你确定你对那些有权使用不带该过滤器的输入格式如Full HTML的用户能绝对的信任。
图2-55,Filtered HTML 格式中的过滤器
在输入格式中,过滤器按照“权重”排列并且过滤修改也是按照这个顺序进行。如图2-56,你可以看到Filtered HTML格式中过滤器的默认排序。一些共享模块能够让你在站中添加更多的过滤器,你可以随意混合和搭配,或放入已有的输入格式或自创格式。这个特性我们将 在第5章讨论添加过滤器的时候详细讲述。
图2-56,重新排列Filtered HTML输入格式中的过滤器
关于格式有一点理解非常重要,那就是格式仅对内容即将脱离数据库并且要在页面显示的时候发生作用。当用户在表单中输入内容并保存,这个时候内容只是原封不 动的存放在数据库中。当用户访问页面要查看内容的时候,Drupal从数据库中将原始信息调出,应用它所使用的格式,依次经过每个过滤器,然后把最终效果 显示在浏览器中。你可以在图2-57中看看这个工作流程。你应该注意到每一个过滤器都应用自己的规则,进而,取得最终显示效果。如果我们给某内容使用的是 Full HTML 输入格式,而不是Filtered HTML格式,那么最后的效果可能会有所不同。使用Filtered HTML格式,文字“alert(‘I cAn pwn U’);”将原样在屏幕中显示,因为“script”标签在显示时被过滤了。而在Full HTML格式下,这些标签不被清除,文本中的代码将得到执行,而不是显示成纯文本。在这个例子中,这个代码将产生一个无害的弹出窗口说“I cAn pwn U”,但它也很容易是一些导致瘫痪的恶意代码。
图2-57,页面创建过程中,输入格式工作流程

因为Drupal仅对输出结果进行过滤处理,如果你在内容中使用了不准使用的东西,那么你还能在编辑它的时候找到它们,它们仅在显示时被剥离。如果 你注意到这种情况并且都要疯了,你应该先检查一下你所使用的输入格式,确认你使用的格式不会把你想显示的东西剥离。这种情况最常见的例子就是在 Filtered HTML格式中来显示图片。你可以扩展HTML过滤器允许使用的标签,进Administer→Site
configuration→Input formats (admin/settings/filters)管理标签。





Comments
Post new comment