5分钟阅读时间 (1003字)

前缀与电话无关

The prefix has nothing to do with telephony

当处理网站安全时,大多数网站管理员只考虑防御潜在的攻击。然而,我们都是人。无论我们多么努力,一些攻击仍然会穿透,并击中我们的网站。我们应该确保这些攻击永远不会对我们的网站造成任何真正的伤害。我们将从...数据库开始保护我们的基础!在本期中,我们将看到一些基于该概念的、实际应用的、有效的安全措施示例,这些措施需要花费最少的时间和技能来应用于您的网站。但是,首先,数据库与安全以及您的网站能否在黑客攻击中生存有什么关系呢?

阿基里斯的脚踵

鉴于大多数可能突破任何防御措施的攻击都将是SQL注入(简称SQLi)尝试,我们的第一道防线应该是数据库。一些枯燥的理论可以帮助我们认识到这一点的重要性。在流行病学中有一个概念叫做“同质人群”。这是一个术语,表示同一群体中许多成员具有共同的特征。在这种情况下,同质人群容易受到单一威胁的破坏,如果该威胁利用这种共同特征来对抗每个成员,那么这种威胁就会占据优势。换句话说,如果你看起来和你的邻居一样,那你就麻烦了!

信不信由你,Joomla!网站由一个同质人群组成,容易受到严重威胁!不,这不是Joomla!设计的缺陷,而是一个对Joomla!预期工作方式的理解不足。我谈的是数据库表前缀,其默认值为jos_。我所见过的大多数“野生的”SQLi攻击都假设你的网站使用数据库表前缀的默认设置来对你进行恶意操作。遗憾的是,他们是正确的。尽管jos_是一个默认值,意在在安装过程中更改,但很少更改。因此,这个良性的默认设置被证明是Joomla!的阿基里斯之踵。但是,真的,你的网站必须这样吗?

点击前请思考

幸运的是,我上一个反问句的答案是坚定且响亮的“不,先生!”如果你在安装过程中小心谨慎,你可以避免成为“同质化人群”中的 Joomla! 网站之一。这非常简单。解决方案就在 Joomla! 安装的第 四页,标题为“数据库配置”。点击“高级设置”标题,找到“表前缀”字段。现在你需要做的就是选择一个合适的新的数据库表前缀。

选择数据库表前缀没有通用规则。理想情况下,它应该是难以猜测的,只包含字母数字字符,大小适中,以下划线结尾。如果这听起来很复杂,我会同意你的看法。我的基本原则是:选择三个随机的小写字母(a-z,请勿使用带重音或国际字符),然后加上一个下划线。例如,aow_ 是一个好的前缀,但 aøw_、αοβ_ 或 somethingwaytoolongtobepractical_ 就不是。这简单多了,对吧?

如果你来晚了...

...你已经在使用默认的 jos_ 前缀了。不要害怕,也不要绝望!我们可以通过一个小的 PHP 脚本解决这个问题,这是你友好的本地开发者——也就是我提供的。在继续之前,请注意,修改你的网站数据库可能具有潜在危险。你将在这里玩火,所以没有犯错的空间。首先在一个本地服务器或开发网站上练习这些更改。记录你所做的一切。无论如何,在你尝试任何更改之前,请记住,作为网站管理员的基本三规则:备份、备份,最重要的是——备份!这样说过后,为了更改数据库表前缀,在你的网站根目录中创建一个名为 rename.php 的文件,内容如下

<?php
$new_prefix = 'new_';
require_once 'configuration.php';
$config = new JConfig;
$con = mysql_connect($config->host, $config->user, $config->password);
if(!is_resource($con)) die('Error connecting to db');
$test = mysql_select_db($config->db, $con);
if($test===false) die('Error connecting to db');
$prefix = $config->dbprefix;
$sql = "show tables where `Tables_in_{$config->db}` like '{$prefix}%'";
$res = mysql_query($sql);
while($row = mysql_fetch_array($res))
{
$old = $row[0];
$new = $new_prefix . substr($old, 4);
$temp = mysql_query("RENAME TABLE `$old` TO `$new`");
if($temp === false) die(mysql_error());
mysql_free_result($temp);
}
mysql_free_result($res);
mysql_close($con);
echo "OK";

你必须将第二行中的 new_ 占位符替换为你想要的新的前缀。将此保存到网站根目录后,通过访问类似以下 URL 的脚本运行它http://www.yoursite.com/rename.php等待几秒钟后,它通常会响应 OK。

此时,你必须首先从网站根目录中删除 rename.php 脚本。然后,编辑 configuration.php 文件,找到以 var $dbprefix 开头的行。它看起来应该是这样的

var $dbprefix = 'jos_';

将旧的 jos_ 前缀替换为你新的前缀,即你在 rename.php 脚本的第二行中使用的那个。如果你的新前缀是 new_,则此行现在应如下所示

var $dbprefix = 'new_';

保存文件,你就可以继续了!你刚刚更改了数据库表前缀,你离抵御潜在黑客攻击又近了一步。

亲爱的,我已经在回家的路上了...

是的,我们已经没有空间讨论这个问题了,但不用担心!这个系列中还有许多关于网站安全的文章。在下一期中,我们将讨论另一个与你的数据库有关的实用安全提示。我不会多说,但我给你一些提示。我在我的上一篇文章中提到了它,当你在一个服务器上安装 Joomla! 时,它总是在那里。我知道你们大多数人现在肯定已经明白了。

直到我们的下一期,请小心并保持安全!

发表在 Joomla 社区杂志上的一些文章代表了作者对特定主题的个人观点或经验,可能不与 Joomla 项目官方立场一致

0
Jane Beyond 及其朋友
Joomla! 在媒体中的报道/媒体 - 2010年8月
 

评论

已经注册? 在此登录
尚未发表评论。成为第一个发表评论的人

通过接受,您将访问由 https://magazine.joomla.net.cn/ 外部的第三方提供的服务