解决 WordPress 漏洞的 5 种最佳方法
已发表: 2020-02-01目前,WordPress 覆盖了 33% 的网络。 这意味着大量用户正在使用它,这肯定会吸引更多的攻击者和黑客。 因此,有更多的威胁和攻击,如 SQL 注入攻击、重定向攻击、CSRF 攻击、XSS 攻击等,导致 WordPress 存在漏洞。 因此,这并不意味着 WordPress 不安全。 我们必须专注于数据清理、数据验证、数据转义、使用和验证 nonce、安全重定向、用户功能等,以确保 WordPress 安全。 但是,WordPress 中的漏洞使其不安全。 所以,让我们讨论一下 WordPress 安全问题。
漏洞也出现在 WordPress 上。 但是怎么做?
一方面,由于WordPress 漏洞存在重大威胁和攻击。 另一方面,我们必须在 WordPress 开发过程中用我们的代码克服或防止这些攻击。
即使您不是 WordPress 开发人员,我们也鼓励您阅读这篇文章,因为您将能够了解吸引黑客攻击您网站的主要攻击方式。 您还将能够了解如何了解 WordPress编码不佳的插件和主题。 如果您经营在线商店,那么确定安全的最佳 WooCommerce 插件和主题对您很有用。
WordPress 安全漏洞
易受攻击的代码来自哪里?
首先,我们应该对WordPress 安全问题的所在有一个很好的了解。 WordPress 由 WordPress 核心代码、主题和插件组成,其中包括 Php、Html、javascript 和其他代码。
开源社区检查 WordPress 核心代码。 有大量的人报告了这个错误并修复了这些漏洞,并因此获得了荣誉。 WordPress 中的漏洞可被 SQL 注入攻击、CSRF 攻击、XSS 攻击、重定向攻击和其他类似技术利用。 所以,WordPress核心开发的漏洞并不多。
主题通常不与 wp 数据库交互,网站也不经常更改主题。 由于 Gutenberg 是 WordPress 的默认编辑器,我们需要选择 Gutenberg Compatible WordPress Themes 以获得更好的性能和安全性。 因此,它发生的漏洞更少。
另一方面,WordPress 插件具有复杂的功能和行为。 此外,与用户和数据库的交互性很高。 该站点确实包含大量具有外部功能的插件。 因此,它们可能会给网站带来大量漏洞。 插件在 WordPress 中引入了主要漏洞。

根据 wpscan.org 的数据,11% 的漏洞来自主题,而 37% 的漏洞来自 WordPress Core 开发。 同样,其余 52% 来自插件。 我假设您已经知道什么是 WordPress 插件
威胁和攻击
如果您是 WP 主题或插件开发人员,那么您必须对威胁和攻击有充分的了解,以确保您的代码安全并减少 WordPress 漏洞。

SQL注入攻击,XSS攻击,重定向攻击,CSRF攻击等多种攻击可以通过数据清理,数据验证,数据转义,使用和验证nonce,安全重定向,用户能力等来预防。
作为开发人员,您的敌人通常是恶意用户。 此类用户会损害我们的代码。 当我们将永不信任用户输入纳入我们的日常编码行为时,我们已经在编写更安全的代码以减少 WordPress 中的安全问题的过程中完成了一半。 这将使您作为 WordPress 定制器的工作更轻松。
WordPress 漏洞 – SQL 注入攻击
为了检索关键和敏感数据,SQL 注入攻击将恶意 SQL 代码注入 WP 数据库。 他们针对使用 SQL 数据库的 WordPress 站点——MySQL、Oracle、SQL Server 等。
为此,他们可以访问密码、电子邮件地址或任何敏感数据,因为他们可以轻松添加、编辑或读取数据。
我们可以举一个著名的“鲍比桌”漫画的例子。

在这部漫画中,一位女士保留了他儿子的名字“罗伯特”); 放表学生; --')'; 使用 SQL 命令输入数据库时,如果名称没有经过清理,将删除学校的整个学生表。
因此,为了避免 SQL 注入,我们必须清理用户输入数据。
让我们详细讨论数据清理。
数据清理
消毒意味着保护输入,清理用户输入。 此过程从输入中删除无效文本、UTF-8 字符或代码,以减少 WordPress 中的漏洞。
它将 HTML 特定字符转换为实体,去除所有标签。 它还删除了换行符、制表符和额外的空格、去除八位字节,这些都是 WordPress 中主要安全问题的原因。
有很多 WordPress 内置功能来清理数据。 下面的列表中很少有:
- sanitize_email():去掉所有不应该出现在电子邮件中的字符
- sanitize_text_field():清理字符串(来自用户输入/数据库)
- sanitize_file_name():去除字符(从文件名)
- sanitize_key():去除除小写字母数字字符、破折号和下划线之外的键。
数据清理示例:
$title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);
在这里,首先,我们正在清理标题。 清理后,我们正在更新 wp 数据库中的标题值。
$Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')
在上面的 SQL 命令中,名称包含插入到学生表中的字符串和特殊字符和实体,名称为“罗伯特”); 这将关闭插入 SQL 命令,另一个命令以名称 DROP TABLE Students 的一半运行; --')'; 而这个drop table students删除了数据库的所有学生记录。
因此,如果在将值输入数据库之前进行了清理,那么您就不会丢失整个学生数据库表。
让我们看一个下面的例子来进行消毒。
$Name=sanitize_text_field("' Robert'); DROP TABLE Students; --') ';"); $sql = $wpdb->prepare("INSERT INTO Students VALUES ($Name)"); /* this will only insert 'Robert DROP TABLE Students' */ $wpdb->query($sql);
在上面的示例中,清理已从名称中删除了额外的实体和字符,并且只允许将字符串插入数据库中。 通过这种方式,我们可以安全地插入数据并避免 SQL 注入。
按照此链接了解有关保护输入的更多信息。
WordPress 漏洞 – XSS 攻击
跨站脚本 (XSS) 攻击注入易受攻击的脚本语言 javascript 代码,以窃取其他用户的类似数据,如 cookie、会话令牌和其他信息。 如果我们有 cookie 信息,那么我们可以自动连接。 WordPress 中的安全问题伴随着 cookie 被盗,因为我们可以轻松地使用其他身份登录。
它在浏览器上运行。 数百万浏览该网站的人将受到此攻击的影响。 毫无疑问,这种攻击是最严重的攻击之一。

XSS 攻击示例:
<script
<script
type=”text/javascript”>
var hacker
='../hacker.php?
cookie_data='
+escape(document.cookie);
</script>
</script>
在这个 XSS 攻击示例中,cookie 逃逸并被发送到 hacker.php 脚本的变量 'cookie_data'
如果攻击者将此脚本注入网站代码中,那么它将在用户的浏览器中执行,并且 cookie 将被发送给攻击者,这是一个危险的问题。 所以为了避免这种情况,我们需要验证。 验证和清理所有用户输入数据并转义输出数据。
下面我们来详细讨论。
数据验证
验证是检查用户输入。 这样做是为了检查用户是否输入了有效值。
验证数据的方法有三种,分别是内置 PHP 函数、核心 WordPress 函数和自定义函数。 永远不要逃避这一点,以避免 WordPress 漏洞。 下面的列表中很少有:
- isset()/empty():检查变量是否存在
- is_email():检查给定数据是否为电子邮件格式
- is_serialized():检查值是否为字符串
数据验证示例:
$number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }
上面的例子检查输入数据是否为数字,如果是数字,它只会运行程序。 因此,数据验证有助于减少 WordPress 安全问题。
点击此链接以了解有关数据验证的更多信息
数据转义
逃避是确保输出。 这是去除不需要的数据的过程,例如格式错误的 HTML 或脚本标签。 转义不仅将特殊的 HTML 字符转换为 HTML 实体,而且还显示而不是执行。 这样做是为了防止 XSS 攻击,并确保数据以用户期望的方式显示。
WordPress 提供了一些辅助函数。 它们用于大多数情况。 他们之中有一些是:
- esc_html():转义 HTML 特定字符
- esc_attr():转义 HTML 标签属性的值
- esc_url():转义超文本引用属性
数据转义示例:
$url
=
"javascript
:
alert
('Hello')";
<a
href=
"<?php
echo
esc_url
($url)
;?>">
Text
</a>
href=
"<?php
echo
esc_url
($url)
;?>">
Text
</a>
在上面的例子中,黑客已经输入了脚本语言代码来挑战 WordPress 网站的安全问题。 所以为了避免这种情况,我们使用 esc_url 来转义 URL 值,然后我们只在代码中回显该值。 这样,我们就阻止了 XSS 攻击。
WordPress 漏洞 – CSRF 攻击
在 WordPress 漏洞中进一步讨论,跨站点请求伪造攻击是一键式威胁和攻击或会话骑乘攻击。
CSRF 攻击允许攻击者在未经用户同意或不知情的情况下强制登录用户执行重要操作。
这里,授权用户发送未经授权的命令。
它依赖于这样的想法,即发送到某个页面或 URL 的授权用户可能会做他们没有意识到他们已经做过的事情。 此外,它可以通过使用 nonce 和验证 nonce 来修复。
使用随机数
WP 生成一个称为 nonce 的安全令牌。 它是一个不重复的唯一编号,仅供您使用,您可以将其用于特定操作。 nonce 值在 24 小时内有效,过期后将由 wp 生成新的。 您也可以设置 nonce 的验证时间。
它保护 URL 和表单不被滥用,以减少 WordPress 中现有的安全问题。
此外,为了使用 nonce 保护表单,请使用 wp_nonce_field() 函数创建一个隐藏的 nonce 字段:
<form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>
以下是nonce的几个函数:
- wp_nonce_url() – 将 nonce 添加到 URL。
- wp_create_nonce() – 以自定义方式使用 nonce 来处理 AJAX 请求。
验证 Nonce
- check_ajax_referer() – 检查随机数(但不检查引用者),如果检查失败,则默认终止脚本执行。
- wp_verify_nonce() – 验证随机数。
if(isset($_POST['name_of_nonce_field']) && wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action')){ //do something } else{ esc_html_e('Sorry,your nonce did not verify.','text-domain'); }
点击此链接以了解有关nonce的更多信息
WordPress 漏洞 – 重定向攻击
WordPress 漏洞还会导致网站访问者自动重定向到恶意网站。
这通常发生在访问者重定向到任何其他页面而不是他们请求的页面或网站时。
如果您的网站流量很高,那么这种攻击可能会导致您网站的流量减少。 您甚至不会意识到您的网站访问者将被重定向到任何其他页面。 但是,它可以在安全重定向的帮助下修复。
安全重定向
如果您将用户重定向到任何页面,则在操作或表单之后,请使用 wp_safe_redirect。 wp_safe_redirect 检查允许的主机。 如果主机不被允许,那么它将重定向到站点 URL。 因此,它将防止恶意重定向到另一台主机。 但这不是 wp_redirect 检查的。 因此,为了减少 WordPress 的安全问题,使用 wp_safe_redirect 是一种更安全的链接重定向方式。
$redirect=admin_url('edit.php'); wp_safe_redirect($redirect);
用户能力漏洞
除了重定向攻击、XSS 攻击、CSRF 攻击和 SQL 注入攻击之外,WordPress 也容易受到用户能力的攻击。 如果您允许任何用户来到您的站点提交任何数据,那么请检查用户功能。 否则,您将成为威胁和攻击的受害者。
用户角色越高,用户拥有的能力越多。
有时开发人员只是忘记确保在页面上提交表单的用户是否具有执行操作所需的权限。 它将带来 WordPress 漏洞的共同来源。
if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }
我们以Contact Form 7 漏洞(WordPress 漏洞类型)为例
这个插件的激活数是5+百万用户。 如果有一个易受攻击的代码,那么它将影响 5+ 百万人。

5.0.3 及更早版本中存在功能漏洞。 以贡献者角色登录的用户可以轻松地编辑联系表单。 默认情况下,只有管理员和编辑角色用户可以访问它。
因此,成为黑客的可能性更大。 新版本的插件解决了这些错误。
在 WordPress 中始终返回或退出
如果您在编写任何函数或 ajax 调用时在完成代码后错过了返回或死亡。 它可能看起来很简单,但可能会导致重要的安全问题。
确保你总是在你想要的地方添加回报和死亡。 您可以举一个 Apple 的 #gotofail 错误示例。
defined( 'ABSPATH' )
defined( 'ABSPATH' )
or die
( "No script kiddies please!" );
function
function
adls_view()
{ global $wpdb;
{ global $wpdb;
include( 'inc/frontend/smls-detail/smls-grid-inline.php' );
exit(); }
function
function
adls_generate_random_string
( $length ){
$string =
'1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$random_string
=
'';
for
( $i = 1; $i <= $length; $i ++ )
{
{
$random_string .=
$string[ rand( 0, 61 ) ];
}
return
$random_string;
}
}
包起来
对于关心安全性的 WordPress 专业人士来说,这是一篇重要的文章。 从这篇文章中,您了解了给 WordPress 带来漏洞的各种威胁和攻击。 它包括SQL注入攻击、XSS攻击、CSRF攻击、重定向攻击等的简要介绍。

还讨论了各种技术,例如数据清理、数据验证、数据转义、使用和验证 nonce、安全重定向和用户功能。 因此,WordPress 中存在安全问题。
总之,
- 永远不要相信用户输入以避免 WordPress 漏洞。
- 验证、清理所有输入并转义所有输出数据
- 让我们相信 WordPress!
如果您在上述威胁和攻击方面遇到任何问题,请告诉我们。 我们的专家将根据您的问题为您提供合适的解决方案。