使用Nofollow避免回帖攻击
很多黑帽垃圾网站利用博客或留言簿的回贴功能,发布大量垃圾信息,指向它们的WEB站点。
向链接添加rel="nofollow"属性,将会告诉搜索引擎这个链接没有经过站点审核,因此不能作为所指向站点的可信投票。但是这样并不能防止垃圾,只是减轻了垃圾网站对您站点攻击的部分效果。链接仍然有效可用,但是并不是垃圾网站所希望的,因为这些链接没有什么价值。
事实上,nofollow并不能消除回帐号和留言簿中的垃圾信息。不幸的是,仍然需要手工审计并进行垃圾过滤。它只是一个威慑。
当您的站点上包含有链接指向不希望为其“投票”的站点时,也可以使用同样的技术。下面就是一个示例:
<a rel="nofllow" href="Bad'>http://too.much.spam">Bad site!</a>
重要的是需要认识到,如果您的站点上有很多链接没有rel="nofollow"而指向那些“坏邻居”,就会损害你的名誉和可信度。当前所有的主流搜索引擎都支持这个nofollow特性。
自动脚本可能仍然会瞄准你的站点,这只是因为垃圾是批量生成的,而生成者并不会对每个站点深入研究。但是实际上,使用nofollow往往可以切断垃圾的传播。如果使用了nofollow,那么危害就只局限于访问者,而不影响搜索引擎排名,因为这些链接不再被搜索引擎当成是对“坏邻居”的投票。最终,由于大部分WEB站点将使用这个特性,从而使得垃圾的效果很差,那些制造者就不会这么频繁地使用这项技术了。
清理用户输入
对用户提供的内容也存在同样的问题,如博客回贴、留言簿和论坛帖子。在这些情况下,都必须注意清理掉可能存在恶意的内容。有两种途径来完成这个工作:
可以通过对HTML进行转义来整个禁用HTML,正如在前面例子中那样使用htmlspecialchars()。下面是一个示例:
echo htmlspecialchars($quest_book_post_content)
而不是:
echo ($quest_book_post_content);
但是,有时需要允许有限的HTML标签。为此有必要清理用户的输入,删除那些可能存在恶意的标签和属性。
一些应用程序采取的方式是使用自己专用的标记语言而不是HTML。类似的专题在第6章的“使用自定义标记语言来生成搜索引擎友好的HTML”一节中有过讨论,但那里的目的不一样,主要为了增强页上HTML优化。它还可以用于确保内容的清理。在当前情况下,需要在HTML上执行htmlspecialchars(),然后使用翻译函数和有很的专用标签比如{link}和{/link},{image}和{/image},来只允许特定的功能。这就是很多论坛应用程序所使用的方式,如vBulletin和phpBB。在使用特定应用程序时,用户需要经常在对话框中切换,并且还要学习这种专用标记语言,相对比较麻烦。但是,对于回帖或留言薄这种事情,HTML提供的通用标记大部分用户都知道,因此允许有限的使用部分标签可能更为应用一睦。这就是在此讨论的解决方案。