如何保护您的网站免受远程代码执行

什么是远程代码执行?

远程代码执行,也称为代码注入,是黑客入侵网站的最常见方式之一。 该术语包括具有一个共同方面的多种技术。 攻击者使用通常为普通用户保留的数据提交方法,将他们的代码在服务器眼中视为合法。

被黑客入侵是任何服务器管理员面临的最大问题之一。 它可以使您的业务陷入停顿,暴露客户数据,最重要的是,根据损害程度损害企业的声誉。 如果您知道要查找的内容,则有多种方法可以保护您的网站免受攻击。

远程代码执行有哪些不同类型?

SQL注入

让我们来看看一些常见的 example 远程代码执行。 其中许多漏洞利用了 SQL 语句的构造方式。 在创建从数据库读取用户名的应用程序时,开发人员可能会尝试使用这样的代码来搜索特定的用户名:

SELECT * FROM users WHERE name = 'username'

您可能会问,该查询有什么问题?

任何访问者,即使是有恶意的访问者,都可以输入用户名。 为了 example,他们可以输入 ‘ OR ‘1’=’1′ –,从而产生一个执行如下所示的 sql 语句的查询。

SELECT * FROM users WHERE name = '' OR '1'='1' --'

现在,假设我们的应用程序在数据库中搜索用户名并选择名称为空的字段。 当数字 1 等于 1 时,第二部分始终为真。 这将最终提供数据库中的每个用户名。

像这样的数据泄漏并不是 SQL 注入的唯一问题。 潜在的攻击者可能会向您的数据库发送多个命令,这可能会删除或覆盖数据。

跨站脚本

跨站点脚本是另一个影响访问者而不是服务器的远程代码执行漏洞。 在网页中,内容和代码以相同的方式呈现。 浏览器可以区分代码,因为它包含在

如果跨站点脚本编写不会是一个大问题 只要 在攻击者的浏览器中执行。 但是,当它被公开(例如评论框)时,它也会影响看到该内容的任何访问者。 通过执行任何远程代码的能力,攻击者可以窃取密码或冒充其他用户。 这个视频 显示了一个这样的攻击的逐步分解,它影响了 Twitter几年前的 TweetDeck 平台。

目录遍历

这种攻击不是针对应用程序本身,甚至不是针对访问者。 这里的主要目标是网站本身。 此漏洞依赖于文件在服务器文件系统上的存储方式。

通常,数据存储在 /home/user/public_html 等目录中。 此目录中的脚本可以使用相对路径访问文件,例如 wp-admin/index.php 引用 /home/user/public_html/wp-admin/index.php。 如果脚本被配置为访问当前目录之外的文件,它们可以通过添加“../”来完成此操作,它指的是当前目录之上的目录。 为了 example,这个目录模式/home/user/public_html/../和/home/user/是一样的。

当允许脚本上传或读取自定义文件名时,攻击者可以引导您的应用程序遍历名称为 ../../../../../../../../ 的目录。 ./etc/passwd。 如果没有输入过滤等安全措施,最终会让他们访问服务器上的核心文件。

防止远程代码执行?

以上所有信息并非旨在引起恐惧或恐吓。 然而,它旨在强调采取强有力的安全措施的重要性。 只需提前了解并做好准备,就可以阻止或减轻这些远程代码执行攻击。 我们应该始终预测并了解我们的服务器如何处理用户提供的信息。

远离远程代码执行漏洞的最佳方法是拥有多层防御。 即使一层失败,我们仍然会受到保护。 以下是防止此类攻击的一些最常见的步骤。

1. 验证用户输入

防止此类漏洞的首要位置是用户与您的应用程序交互的地方。 最简单的方法是过滤和删除任何不需要的字符。 另一种选择是通过转义来保留内容。

转义是我们告诉计算机获取看起来像代码的东西并将其视为常规文本而不是实际代码的过程。 从 example,前面提到的

2.使用成熟的软件

转义作为第一道防线非常有效,但除了脚本标签之外,浏览器或服务器还有其他方式可以解释代码。 试图跟踪所有这些将变得非常复杂,非常快。 幸运的是,开发人员已经考虑过这个问题。 使用信誉良好且值得信赖的内容管理系统或 CMS,例如 WordPress,可为我们提供解决方案。 这就是为什么必须保持软件最新的原因。 如果发现漏洞,开发人员将全天候工作以修补任何新发现的弱点。 这包括主题和使用的任何插件。

如果我们使用自定义 CMS 应用程序,我们可以使用参数化查询来避免 SQL 注入攻击。 这种类型的查询会提前告诉应用程序我们要运行哪种类型的查询。 然后它可以识别并删除可能尝试插入的额外命令。 相反,它发送原始查询,没有添加的字符串。

这是我们的 example 从上面看起来像使用参数化查询:

$query=”SELECT * FROM users WHERE name = ?”
$results=$query.execute(“ ' OR '1'='1' --”)

这一次,数据库正确处理了'OR'1'='1'。 它将此查询视为一串文本,并意识到没有与该名称关联的用户。

3.最小特权原则

在极少数情况下,可能会出现您和 CMS 开发人员都不知道的 0-day 漏洞。 我们仍然可以通过设置关于我们的应用程序可以做什么的智能规则来限制攻击者的力量。 为了 example,如果我们正在设计一个只从数据库读取的应用程序,则无需授予应用程序写入或删除记录的权限。 这样,即使攻击者试图破坏脚本,他们也会遇到错误。

最小权限原则有用的另一个领域是 PHP 函数。 这些是在线攻击者的热门目标。 您的应用程序可能不需要的强大功能,例如 exec()(运行作为文本传递的代码)或 ini_set()(允许您从脚本中更改 PHP 设置),可以禁用以防止它们被使用由攻击者。

这个想法不仅适用于服务器端代码,还可以保护您网站的面向公众的部分。

Content-Security-Policy 是现代浏览器用来确定允许在您的网站上加载哪些内容的 HTTP 标头。 通过从我们的 Web 服务器或应用程序发送标头,我们可以指定可以运行的脚本类型和位置。 这种策略可以防止攻击者注入和使用他们的脚本。

您还可以通过设置 HttpOnly 或 SameSite=Strict 属性来防止 cookie 被脚本读取或根据请求发送到其他站点。 即使在最坏的情况下,攻击者的代码最终会在您的网站上运行,这也会阻止他们访问您用户的身份验证 cookie,从而显着限制他们可能造成的损害。

液体网络安全产品可以提供帮助!

当了解潜伏在那里的所有威胁时,感到有点不知所措是正常的。 幸运的是,我们在这里提供帮助。 我们的托管产品将您的网站管理交到我们的专家手中。 同时,我们的服务器保护和 漏洞扫描 如果您仍然愿意领导您的服务器管理,附加组件会让您更加安心。

我们以成为 Hosting™ 中最有帮助的人而自豪!

我们知识渊博的解决方案或经验丰富的托管顾问随时可以向您展示如何利用这些技术!

我们全年 365 天、每周 7 天、每天 24 小时提供服务,通过我们的票务系统 [email protected]、电话(800-580-4986)或 在线聊天 或您喜欢的任何方法。

我们为您努力工作,以便您可以放松。