绕过ESA配置
绕过ESA配置

阿里云ESA免费版结合了防火墙和CDN功能,会自动的帮助大家安全使用wordpress,由于是免费版,他会自动把wordpress的/wp-includes/,/wp-includes/列为敏感目录,如果触发了规则,后台的古腾堡编辑器可就洗白了,那么怎么解决这个问题呢?

一、总体解决思想

通过将静态资源路径“伪装”为非敏感路径(如 /static/),从而绕过 ESA 的 WAF 拦截。

二、解决办法

(一)配合WordPress 主题代码(functions.php)

为了让 WordPress 输出的 CSS/JS 链接变成 /static/includes/...,请在当前主题的 functions.php 中添加:

<?php
// 将 wp-includes 和 wp-admin 的静态资源 URL 重写为 /static/ 开头
function safe_static_asset_urls($url) {
    $home = home_url('/');
    if (strpos($url, $home . 'wp-includes/') === 0) {
        return str_replace($home . 'wp-includes/', $home . 'static/includes/', $url);
    }
    if (strpos($url, $home . 'wp-admin/') === 0) {
        return str_replace($home . 'wp-admin/', $home . 'static/admin/', $url);
    }
    return $url;
}
add_filter('style_loader_src', 'safe_static_asset_urls', 100);
add_filter('script_loader_src', 'safe_static_asset_urls', 100);
?>

某些主题的functions.php文件,请去掉<?php ?>,也就是:

// 将 wp-includes 和 wp-admin 的静态资源 URL 重写为 /static/ 开头
function safe_static_asset_urls($url) {
    $home = home_url('/');
    if (strpos($url, $home . 'wp-includes/') === 0) {
        return str_replace($home . 'wp-includes/', $home . 'static/includes/', $url);
    }
    if (strpos($url, $home . 'wp-admin/') === 0) {
        return str_replace($home . 'wp-admin/', $home . 'static/admin/', $url);
    }
    return $url;
}
add_filter('style_loader_src', 'safe_static_asset_urls', 100);
add_filter('script_loader_src', 'safe_static_asset_urls', 100);

(二) 以Nginx为例, 配置片段(请添加到您的站点 server 块中)

如果是宝塔,就打开网站--->设置-->配置文件中添加:

    # === 绕过 ESA WAF 拦截:代理 wp-includes 静态资源 ===
location ^~ /static/includes/ {
    location ~ \.php$ {
        deny all;
        return 403;
    }

    alias /www/wwwroot/你网站路径/wp-includes/;   
}

# 可选:同样处理 wp-admin 的静态资源(如 common.min.css)
location ^~ /static/admin/ {
    location ~ \.php$ {
        deny all;
        return 403;
    }
    alias /www/wwwroot/你网站路径/wp-admin/;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注