如何对woocommerce筛选器防护,使用户登录后才能筛选查询?

碰到一个问题,商城站点遭受了查询攻击,利用woocomerce的筛选器构造查询参数疯狂查询,一开始仅使用了CF的WAF,在此基础之上,增加对未登陆的查询进行限制。

一、构建一个判断功能

//登录后才能查询
function check_user_login_for_filters() {
    // 检测URL中是否有特定的查询参数
    $filter_param_prefix = 'filter_'; // 所有筛选参数的前缀
    $query_params = array_keys($_GET);
    $filtered_params = array_filter($query_params, function($key) use ($filter_param_prefix) {
        return strpos($key, $filter_param_prefix) === 0;
    });

    // 计算筛选参数的数量
    $num_filter_params = count($filtered_params);

    // 计算特定筛选参数值的数量
    $filter_values_counts = array_map(function($param) {
        $values = isset($_GET[$param]) ? $_GET[$param] : '';
        
        $values = is_array($values) ? $values : explode(',', $values); // 将字符串转换为数组
        return count($values);
    }, $filtered_params);

    $total_values_count = array_sum($filter_values_counts);

    // 如果满足条件(筛选参数多于3个或所有筛选参数的值总数多于4个)并且用户未登录
    if (($num_filter_params > 3 || $total_values_count > 4) && !is_user_logged_in()) {
        // 构建重定向URL,并附加一个参数用于提示消息
        $redirect_url = add_query_arg('query_safe', "no", site_url('/login'));
        wp_redirect($redirect_url); // 重定向到登录页面
        exit;
    }
}
add_action('template_redirect', 'check_user_login_for_filters');

二、配合js弹窗提醒

document.addEventListener('DOMContentLoaded', function() {
    // 检查URL中是否有'query_safe'参数
    const urlParams = new URLSearchParams(window.location.search);
    if (urlParams.get('query_safe') === 'no') {
        // 显示提示消息
        alert('【ZKCOI达温馨提示:当前查询过多,请登录后再试!】');
    }
});

 

本文作者:ZKCOI

文章名称:如何对woocommerce筛选器防护,使用户登录后才能筛选查询?

文章链接:https://www.zkcoi.com/365up/program/3911.html

本站资源仅供个人学习和交流,如若转载,请注明出处,详见《免责声明》

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZKCOIZKCOI
国家网络身份认证是盘大棋!
上一篇 2024年8月2日 下午10:42
【实测有效】2024最新QQ无保抓包改密BUG和分析
下一篇 2024年8月27日 上午10:27

相关推荐

发表回复

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

联系博主

立即联系
一般有空就回复

qrcode_web

微信扫码联系我

insert_link 友情链接
分享本页
返回顶部