那么,我们来关注一下您的Joomla!网站的安全性吧?
那么,我们来关注一下您的Joomla!网站的安全性吧?您喜欢您的网站,您觉得它很漂亮;您投入了如此多的精力。您对结果感到自豪,毫无疑问您应该感到自豪。您的网站既漂亮又有用。 您将它放在互联网上,让更多的人受益。让我做一个比较:假设您的网站成为您的家。当您不在家时,您会把门敞开吗?您的落地窗在您不在的时候是全开的吗?当然不会。那么您的网站呢?您想过要关上门窗,防止小偷进入吗?
让我们更仔细地看看这些门和窗户
乍一看,一个Joomla!网站只有两个入口,一个是面向街道的,一个是面向花园的。
面向街道的是位于网站根目录的index.php文件,因此可以通过URL http://votresite/index.php 访问。众所周知,这个地址,因为只需输入 http://votresite 就可以访问。无需任何密钥即可打开。您的网站是公开的。
面向花园的是另一个index.php文件,其URL为 http://votresite/administrator/index.php。在一个理想的世界里,您应该是唯一知道这个门存在的人。不幸的是,黑客知道如何测试它的存在,因为只需访问URL http://votresite/administrator/index.php,看看服务器是否回答“是的,有一个门,我给你看”(HTTP 200状态码)或“不,什么都没有”(403、404或其他状态码)。
我们的Joomla!网站里有没有窗户?不幸的是,是的,而且数量非常多:这些都是我们安装的程序,即组件、模块、插件、模板、库等等,它们都附带大量的PHP文件。
从理论上讲,我们上面已经看到,除了我们两个index.php文件外,没有任何PHP文件应该从URL可执行,但说实话,您并不知道。
您如何知道您没有安装一个通过URL提供可执行PHP文件的组件,例如,比如http://votresite/components/com_dummy/helpers/send.php,其中send.php是com_dummy的合法文件,可以在com_dummy中检测到错误时发送邮件给网站管理员。您不知道,有时即使开发者使用现成的代码库,他们自己也可能不知道。
跟踪所有扩展是非常困难的。在我们的比较中,每个可调用的脚本都是一个我们房子的窗户:它应该被关上。
您也可能在如/media等目录中拥有PHP文件:一个完全合法的组件可能会预置一个PHP文件来动态生成样式表,一个PHP文件来生成图片的缩略图等。对于这些开发者来说,这一切都是完全合法的。
问题是:您对这些窗户一无所知!您甚至不知道这些脚本是否合法或有害。事实上,黑客会在如/administrator/components/com_admin、/components/com_content、/libraries/cms、/media/com_content等目录中放置PHP文件,这通常是Joomla!的本地目录。添加的文件具有“万能”的名称,如“content.php”、“article.php”、“food.php”等,在Joomla!的新安装中都不存在。
让我们保卫我们的家园,安装两个守卫:入口和出口
存在多种类型的“防火墙”(英文为firewall)应用程序。它们的目的是在这里和那里添加保护措施,限制执行,禁止访问敏感目录等。
大多数保护措施是通过在敏感目录(如/media、/images、/stories或/tmp)中添加名为.htaccess的文件来实现的。提到的目录具有一个共同的特征:从理论上讲,永远不应该在这些目录中允许执行脚本PHP。换句话说:一个如http://votresite/media/food.php的URL永远不应该能够被访问,因为food.php在媒体目录中没有合法的理由。
想象以下场景:一个黑客已经成功地利用了您网站上一个组件的漏洞;您安装了一个旧版本,并忘记更新或错误配置(例如,允许任何人上传文件)。这种情况并不罕见,因为大多数网站都只在短时间内得到维护。随着网站变老,它不可能避免这样的不幸。事实是:迟早,一个黑客会成功渗透您的网站,并随意放置一个有害的PHP文件。
理想情况下,因此应该有两个守卫:一个将分析进入您网站的所有内容,并确保禁止所有未被期待的内容(例如:文件上传)另一个将禁止执行不受欢迎的PHP代码。
守卫1:禁止家中未经授权的入口
这涉及到为您的网站选择正确的设置:请仔细查看Joomla!的所有设置屏幕,熟练掌握权限(ACLs)...并浏览已安装组件的设置屏幕,以根据您的愿望限制权限。这样,您可能有一个文件下载管理组件;也许不需要允许任何人从前端上传文件。如果是这样,请禁止“上传”权限。
为了确保没有人(包括您自己)能够上传文件,您可以在网站根目录创建一个php.ini文件,并包含以下行:
file_uploads=off
如果您的托管商支持php.ini的“覆盖”功能,您已经禁止了上传:黑客将无法通过Web在您的网站上安装恶意代码。这从一开始就提供了最大限度的保护...(但会极大地干扰活跃的网站)。
如果您的托管商不支持,请在其文件 .htaccess 中添加以下内容。
<IfModule mod_php5.c>
php_flag file_uploads Off
</IfModule>
第二层保护:控制输出
如果入口保护失败怎么办?如果黑客在我们的服务器上保存了一个包含病毒的PHP文件,用于生成垃圾邮件等,会怎样?
这种情况非常可能发生,因为攻击可能是通过FTP或通过您所在同一服务器上的非安全网站(一个托管商对网站隔离非常不重视)进行的(一个被破坏的网站可能会进一步破坏同一服务器上的所有网站)。
因此,第二层保护必须假设它是在独立工作的,而无需关心是否设置了阻塞。
一项基本技术是禁止在前面提到的不应执行PHP文件的那些目录中执行PHP文件。在Joomla!中,有几个这样的目录,包括 /images, /logs, /media, /stories 和 /tmp。在任何时候,也就是说,一个如 http://votresite/tmp/dummy.php 的URL都不应该被执行。永远不...除非您为特定情况设置了例外。
这些例外是那些开发者在Joomla!代码隔离和目录结构上不够严格的部分。
为了保护您的网站,找出这些“禁止PHP”的目录,并在其中放置以下内容的 .htaccess 文件。
对于 /logs 和 /tmp 目录,以下是用于禁止所有指向 http://votresite/logs 或 http://votresite/tmp 的URL的行。实际上,这些目录仅用于Joomla!的内部使用。
Deny from all
对于 /images, /media 和 /stories 目录
AddHandler cgi-script .php .pl .py .jsp .asp .sh .cgi
Options -ExecCGI
这里是要撤销执行PHP文件的权限。因此,一个如 http://votresite/images/dummy.php 的URL将无法执行此病毒。
请注意,在这些目录的情况下,您可能会遇到某些组件执行问题。因此,在设置这些 .htaccess 文件后,您应该彻底全面地测试您的网站。
深入探讨
- 例如,/components、/modules 或 /plugins 等一些目录在根目录下没有PHP文件。因此,您永远不会遇到如 http://votresite/plugins/un-script.php 的调用。因此,您可以在根目录(例如 /components)中放置一个 .htaccess 文件来禁止在目录根目录执行PHP代码,但在子目录中允许执行;
- 其他目录,例如 /libraries,没有从URL访问的意图。这里是指Joomla!在执行函数时将包含的文件库。同样,您也永远不会遇到如 http://votresite/libraries/un-script.php 的URL。您也可以在此处禁止从URL调用PHP脚本。
在Joomla!的不同目录中正确编程和妥善放置这些 .htaccess 文件将使您能够有效地保护您的网站,因为无论病毒是否已放置在您的网站上,如果它被放置在受保护的目录中,它都无法被利用。
但请始终记住,100%的安全是不存在的(例如,只需将病毒保存在/components/com_content的子目录下,就可以在当前保护状态下执行,如上所示)。
一些其他建议
- 永远不要将备份放在像/backups、/_backups...这样的文件夹中,或者将备份保存到网站根目录,命名为“backup.zip”(或backup.tar、backup.tar.gz、backup.gz等)。实际上,有一些专门开发的脚本可以随机请求(GET或HEAD)http://votresite/backup.zip;
- 如果您需要安装phpMyAdmin,不要将其安装在网站根目录(因此不包括http://votresite/phpmyadmin(或/phpMyAdmin、/pma或...)),因为在这里我也发现了对我的网站上的这种连接;
- 删除位于网站根目录中的LICENSE.txt、README.txt和web.config.txt(如果您使用Apache)文件,因为它们可以从URL访问,并允许知道您有一个Joomla!网站;
- 删除您在网站根目录中找到的joomla.xml文件,因为它1.没有用,2.可以从URL访问(http://votresite/joomla.xml)。它揭示了您有一个Joomla!及其版本;
- 为您的/administrator文件夹设置一个Apache密码(阅读关于
.htpasswd
文件的众多教程),以保护您的文件夹。如果您有一个固定IP地址,请使用白名单阻止:只有授权的IP地址才能访问您的管理。如果没有密码/ IP限制,请禁止访问管理中的.ini、.sql、.sh、.txt或.xml文件(这样就可以阻止诸如http://votresite/administrator/components/com_admin/admin.xml之类的URL); - 请记住,将/index.php、/administrator/index.php和/templates/votretemplate/index.php文件设置为chmod 444,以防止它们可修改;
- ...
请记住,与其他材料(如网站优化、搜索引擎优化)一样,安全是一个持续的过程,永远不要认为您的守护者是无懈可击的。定期进行备份,在本地测试它们,定期进行更新,分析您的Apache服务器日志文件,监视对网站文件所做的更改,当创建新文件时保持警觉...
网站的安全是您维护的一部分,人们经常忘记它,总是在太晚的时候才想起它。
发表在Joomla社区杂志上的某些文章代表了作者对特定主题的个人观点或经验,可能不与Joomla项目的官方立场一致
通过接受,您将访问https://magazine.joomla.net.cn/外部第三方提供的服务
评论