我们在《Joomla! 1.5 网站防黑9条戒律》这篇文章中已经介绍了一些改进 Joomla! 网站安全性的措施(Joomla 之门会员 solorush 在评论中还补充了一条)。今天我浏览国外网站时又看到一篇文章介绍了7条增强 Joomla! 站点安全防范的建议,因此翻译如下。

 

Optimize Joomla! Security

 

修改默认的 jos_ 数据表前缀

Joomla!之门的《Joomla! 1.5 网站防黑9条戒律》这篇文章中也强调要修改默认的数据表前缀,在 Joomla! 安装过程 中进行数据表前缀的设置当然很容易,但文章没有说明“对于已经建成的网站,如何修改数据表前缀”。今天介绍一下这个方法:

  1. 以管理员身份登录到 Joomla! 后台;
  2. 进入“全局设置”(global configuration),找到“数据库”标签页,修改原来的数据表前缀 jos_ 为新的前缀(例如:fdasqw_),然后点击“保存”;
  3. 通过 phpMyAdmin 访问你的网站数据库;
  4. 点击“导出”(export)标签页,所有参数保持默认值,直接点击“执行”按钮。导出过程可能需要一点时间;
  5. 导出完成后,打开得到的 SQL 文件,选择全部代码并复制,然后粘贴到文本编辑器(例如:Notepad++);
  6. 从 phpMyAdmin 中选择你数据库中的全部数据表,删除它们;
  7. 在 Notepad++ 中,利用“查找替换”功能,将全部 jos_ 字串替换为刚才设置的新前缀(fdasqw_);
  8. 完成替换后,复制全部代码。进入 phpMyAdmin,点击 SQL 标签页,将这些代码粘贴到输入框,然后点击“执行”按钮。

Joomla!之门提示:如果你的数据库很大,那么最后通过 SQL 方式导入的过程恐怕很难成功。对于大型数据库文件,推荐使用 BigDump 工具

去掉第三方扩展的名称及版本号

大多数安全漏洞只存在于特定扩展的特定版本中。因此,为了防止黑客根据扩展名称及版本号来迅速寻找“肉机”,就有必要去掉网站前台显示的第三方扩展的名称及版本号。

有些开发人员会在后台参数中留下“是否显示作者版权链接”的选项,对于这些扩展,我们选择“否”即可;大多数第三方扩展的作者都会在前台留下一个版权链接,里面含有该扩展的名称和版本号。去掉这些 hardcod 方式的版权链接的方法是:

假设有一个 com_extension 扩展,将 /components/com_extension 目录复制到 PC 上,用 Notepad++ 打开其中一个 php 文件,然后使用“在多个文件中搜索”功能(勾选“搜索子目录”),搜索前台所显示的那个字串,找到之后直接从源代码中删除即可。

Joomla!之门提示:

有些扩展的版权链接使用了特殊的方式嵌入,例如 Artio JoomSEF,用上述方法是无法删除的。如果你发现某个特殊版权标记无法删除,可以到 Joomla! 中文论坛发帖讨论。

使用 SEF 友好网址组件

SEF 友好网址不仅有利于网站的搜索引擎优化(SEO),也有利于提高安全防护作用。原因是:如果不启用 SEF,则 Joomla! 默认的页面 URL 中会含有第三方扩展的名称,如网址中 option=com_contact 这部分,这里 com_contact 就是“联系人管理”组件的名称。

黑客当然不是通过肉眼来寻找 URL 里面的扩展名称,他们会使用 Google 搜索技巧中的 inurl 方法来快速寻找。

推荐使用 Artio JoomSEF,或者 sh404SEF,或者其它某个 SEF 组件来对 Joomla! 默认的动态网址进行静态化重写,一方面隐藏了扩展名称,另一方面也增强了 SEO 效果。

使用最新版本的 Joomla! 核心及扩展

经常了解一下你正在使用的 Joomla! 核心和第三方扩展是否有了新版本。如果有新版,就尽快升级。一般来说,新版本总是能够修复旧版的安全漏洞或功能 bug。

Joomla!之门提示:

任何升级操作之前,请做好网站的备份工作。强烈推荐使用 Akeeba Backup 备份工具

给目录及文件设置正确的权限(CHMOD)

只有当某个脚本会写入到目录或文件时,才将该目录或文件的权限设置为 777 或 707。其它所有文件和目录的权限都应该设置如下:

  • PHP 文件:644
  • 配置文件:666
  • 其它目录:755

Joomla之门提示:

这里所说的 CHMOD 权限系统是 Linux/*nix 服务器平台特有的功能,如果你使用的是 Windows 平台服务器,就没有这个功能。强烈建议将 Joomla! 运行在 Linux 服务器上。

及时删除残留文件

有时候你可能安装了某个扩展之后不久又不喜欢它了,多数用户这时会进行“取消发布”操作,而不是“卸载”。如果是“取消发布”,则该扩展的文件仍然存放在你的网站空间,如果该扩展的 PHP 文件正好存在一个安全漏洞,就很可能被黑客利用。因此,当你不再需要某个第三方扩展时,立即将它彻底删除,而不要“取消发布”。

Joomla!之门提示:

当你通过 Joomla!后台卸载某些组件后,其数据表或许并未删除。如果你确认不再需要该组件,建议通过 phpMyAdmin 将其数据表也彻底删除,以免某个设计不严谨的数据表遭到 SQL Injection 劫持。

修改 .htaccess 文件

用文本编辑器 Notepad++ 打开你 Joomla 网站根目录下的 .htaccess 文件,添加下面的代码进去:

########## Begin - Rewrite rules to block out some common exploits#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Block out any script that includes a < script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script that tries to set CONFIG_EXT (com_extcal2 issue)
RewriteCond %{QUERY_STRING} CONFIG_EXT([|%20|%5B).*= [NC,OR]
# Block out any script that tries to set sbp or sb_authorname via URL (simpleboard)
RewriteCond %{QUERY_STRING} sbp(=|%20|%3D) [OR]
RewriteCond %{QUERY_STRING} sb_authorname(=|%20|%3D)
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits



建议阅读下列文档了解更多保安措施:

关注下列网站是否公布了 Joomla! 的某个安全漏洞:

 

如果您对 Joomla! 的安全问题还有其它独到见解,欢迎在下面发表评论,或前往 Joomla! 中文论坛发帖讨论。