Page 1 of 1

保护您的网站服务器免遭黑客攻击的 5 个步骤

Posted: Mon Dec 09, 2024 8:01 am
by subornaakter01
如何保护网站免受黑客攻击?让我们看一下 5 个基本步骤。

第 1 步:选择安全的托管
在网站的开发过程中,您需要选择一个让您不必担心安全性的服务器。所谓的“邻居”可能会导致网站出现问题,因此您需要寻找不托管未经验证内容的托管商,它必须拥有许可证和良好的 领英数据库 声誉。您还可以使用专用服务器服务。

站点服务器保护

第二步:定期更改管理员密码
强密码是:

长度至少 30 个字符;

字母和数字的复杂组合;

Image


唯一性(未在其他资源上使用);

缺乏个人数据。

无法使用电子邮件客户端和即时通讯程序发送密码。您可以将它们存储在计算机上的特殊程序(例如 KeePass Password Safe)中。生成器用于创建安全密码。

第 3 步:跟踪传入数据
为了确保站点的安全,有必要验证访问该站点的所有数据。这是通过防火墙(WAF - Web 应用程序防火墙)完成的,它是站点和来自外部的信息之间的过滤器。它会对其进行扫描,阻止恶意代码并仅允许安全请求。防火墙可以在 DNS 级别(流量通过代理服务器)、客户端服务器或 CMS 插件运行。第一种类型被认为是最安全的。

对于最有可能通过数据输入表单受到攻击的 WordPress 网站,请使用 Wordfence Security、Sucuri Security 或 iThemes Security。


也读一下!

“网站的 CMS:最佳引擎回顾”
更多详情
第四步:限制用户权限
网站托管后必须立即分配权利。

标准约定:

r - 读取数据,

w——内容变化,

x - 文件执行/文件夹条目。

也读一下!

“网站验证码:如何选择和安装最合适的验证码”
更多详情
通过FTP客户端访问时:

4 - 阅读,

2 - 记录,

1 - 执行。

权限通过加法形成:4+2=6(读写)、4(只读)、4+2+1=7(完全访问)等。

用户分为三组:

u - 管理员,

g——管理组,

- 其余的部分。

字母和数字的组合表明了访问该站点的功能。例如754可以写成rwx-rx-r,这段代码会给管理员完全的权限,对管理组读取和执行文件(文件夹的入口),对其他人只读。文件夹的代码应设置为 755,文件的代码应设置为 644。

用户权利的限制

使用免费 FTP 客户端 FileZilla 进行访问替换。为此,您需要下载该程序,然后右键单击该文件并选择“文件访问权限”。

外壳:VT-金属
了解我们如何将莫斯科一家金属加工公司的 吸引申请成本降低 13 倍
了解如何
您应该为文件夹和文件起一个不寻常的名称,以使诈骗者难以访问它们。

步骤5:阻止第三方IP访问托管
这仅对于使用静态 IP 地址的用户来说是必要的!通过控制面板,将必要的代码写入.htaccess文件中:

关闭对托管的访问

有关通过 .htaccess 管理文件访问的说明,请参见:https: //snipp.ru/htaccess/access-htaccess。


保护网站免受黑客攻击的 7 种方法
让我们尝试讨论应构成每个网站编程基础的主要安全原则。要理解它们,您必须具备基本的网络编程和互联网搜索技能。此外,我们还将描述黑客攻击网络资源的主要方法,并就如何保护您的网站免受黑客攻击提供建议。我们将主要关注 PHP + MySQL 平台的使用,尽管基本原理应该适用于其他平台。

有关此主题的推荐文章:
企业的竞争优势:如何形成和发展

如何使企业成功而不成为公司的“消防员”

营销策略:品种和形成阶段

站点安全的基本原则之一是不信任来自外部的任何信息,即使在用户浏览器中使用 JavaScript 进行了初步数据验证。即使这是用户浏览器的名称(用户代理)或网站之前设置的 cookie。事实上,所有传入的信息都可以伪造。

例如,一个流行的论坛引擎之前曾被黑客通过发送带有伪造 cookie 的请求进行攻击,从而导致SQL 注入(稍后会详细介绍)。

由于本文描述的黑客方法相当肤浅,因此如有必要,在互联网上了解更多有关它们的信息是有意义的。

通过下载文件来入侵网站

有些网站允许用户上传自己的文件,例如照片或 JPEG 图像。可以将可执行文件而不是照片上传到网站,因此有必要对上传文件的类型进行限制。

上传文件

加载 PHP 文件时,$_FILES['userfile']['type'] 变量返回文件的 mime 类型;对于 JPEG 图像,它将是 image/jpeg。看起来这种类型的检查足以确保它是加载的图像。还有尝试使用 getimagesize 或 imagecreatefromjpeg 函数读取图像文件的想法。但是,这里的文件类型是根据内容确定的,因此以 .php 扩展名保存的有效 JPEG 图像将被确定为 image/jpeg。它的名称格式为 xxxxx.php。

决定特定文件处理程序的 Web 服务器会评估扩展名。欺诈者使用该图像并在末尾(或 EXIF 数据中)添加 PHP 脚本,结果服务器执行它,网站被黑客攻击。

原来,安全控制是通过研究文件扩展名来进行的。值得通过确定 mime 类型并使用 getimagesize 函数打开文件来检查文件,只是为了识别垃圾,垃圾本身不会损害站点,但不是图像。

此外,文件可能最终位于用户无法访问的目录中。它们是通过脚本发送的。但这会导致服务器负载更加严重,并且需要实现Web服务器的基本功能(发出最后更改的日期并响应“If-Modified-Since”等条件请求,发出正确的mime-类型和恢复支持)。

还可以在 Web 服务器设置中为包含用户文件的文件夹使用 RemoveHandler 指令来禁止执行脚本,但正因为如此,开发人员必须为特定支持的所有处理程序指定大量文件扩展名网络服务器。因此,您可能会错过一些新的或不是特别知名的处理器。

注册全局变量

注册全局变量

PHP 具有“注册全局变量”功能 - 当在请求(GET、POST、COOKIE)中收到变量时自动创建变量。当启用 register_globals 时,名为 script.php?a=hello 的 <?php echo $a;?> 脚本将打印“hello”。如果技术人员不注意变量的初始初始化,则可能会出现漏洞。它看起来像这样:

if ($login == 'admin' && $password == '管理员密码') $is_admin = true;

......

if ($is_admin) {某些操作仅允许管理员执行}


您可能认为将 $is_admin 变量设置为 true 需要管理员密码;如果没有它,它将保持未定义状态,并且 if($is_admin) 将失败。但是,可以通过使用参数 ?is_admin=1 调用脚本来设置 $is_admin 变量。该网站被黑客攻击是因为请求中省略了一个变量(例如,脚本开头没有写入 $is_admin = false)。

要跟踪此类情况,值得使用 error_reporting 指令让 PHP 显示所有错误、警告和通知。在上面的示例中,在这种情况下可以看到有关使用未初始化的 $is_admin 变量的注释。这就是为什么编写包含所有 PHP 诊断消息的脚本如此重要的原因。

SQL注入

SQL注入

当SQL注入攻击发生时,开发人员和程序员常常不得不考虑如何保护他们的网站免受黑客攻击。它们针对的是无法正确地将 SQL 查询与插入其中的数据分开的站点。让我们通过一个示例来演示 SQL 注入是什么样子的。

有一个网站是用户发布的留言板。他们可以通过界面删除其条目。 PHP 脚本代码如下所示:

mysql_query('从消息中删除 id='.$message_id.' AND user_id='.$user_id);

在本例中,message_id 变量来自“删除”链接 ($_REQUEST['message_id']),它包含要删除的记录的标识符(整数)。 user_id 变量存储在会话中;在站点上成功授权后,用户的标识符将被写入其中。

假设攻击者能够伪造删除链接的地址并发送“?message_id=15 OR 1=1”而不是“?message_id=15”。将这个值代入查询后,就会变成这样:

从 id=15 OR 1=1 AND user_id=3 的消息中删除

可以看到,数据变成了一个表达式,表达式中包含一个逻辑“或”(OR),这样攻击者就“关闭”了user_id检查,从而可以删除其他人的记录。

让我们举另一个例子 - 检查用户的登录名和密码,这些信息在 $login 和 $password 变量中接收:

mysql_query('从用户中选择 id WHERE 登录 =“'.$login.'” AND 密码 =“'.$password.'”');

如果攻击者发送“admin”或1=“1”到$login,那么即使不知道密码,他也将被允许以管理员登录名进入该网站:

从用户中选择 ID,其中登录名 =“admin”或 1 =“1”和密码 =“”

而如果他写“” OR 1=1 OR 1="1”,那么他通常会以数据库中找到的第一个用户登录。

也就是说,要防止 SQL 注入,需要确保数据不被解释为表达式。您需要将值强制转换为预期类型(函数 intval、floatval,如果需要数字),或者简单地将它们全部括在引号中并转义其中包含的特殊字符。

PHP 语言有一个特殊的函数 mysql_real_escape_string,它允许您在将文本插入 MySQL 查询之前对其进行转义。有时会使用 mysql_escape_string、addslashes 和 htmlspecialchars 来代替,但它们无效或只是针对其他目的(我们正在讨论后者)。