WordPress 透过 CDN 代理获取访客评论者真实 IP 地址

2021-11-21 11:46 425 8 条评论 龙笑天下
Dragon主题购买

Wordpress 透过 CDN 代理获取访客评论者真实 IP 地址

今天龙笑天在编辑修改某评论时,突然发现评论修改完后,Wordpress会把原记录的评论者 IP 更新为评论编辑修改者的 IP,也就是评论者变为龙笑天的 IP 了...

WordPress 的这个评论者 IP 修改逻辑显然是不对的,经过沈唁志的测试,才发现是主题里的一个透过代理获取用户真实 IP 的钩子函数导致的问题...

钩子函数来自这里,需要修改为下面这样后才能行:

/**
 * WordPress 透过 CDN 代理获取访客评论者真实 IP 地址 - 龙笑天下
 * https://www.ilxtx.com/wordpress-get-real-comment-ip.html
 */
function dr_filter_get_real_comment_ip($comment_author_IP) {
    if( is_admin() ){
        return $comment_author_IP;
    }
    
    $REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];

    // 使用 CloudFlare CDN
    if ( !empty($_SERVER['HTTP_CF_CONNECTING_IP']) ) {
        $HTTP_CF_CONNECTING_IP = explode(',', $_SERVER['HTTP_CF_CONNECTING_IP']);
        if (!empty($HTTP_CF_CONNECTING_IP)) {
            $REMOTE_ADDR = trim($HTTP_CF_CONNECTING_IP[0]);
        }
    }
 
    else if (!empty($_SERVER['X_FORWARDED_FOR'])) {
        $X_FORWARDED_FOR = explode(',', $_SERVER['X_FORWARDED_FOR']);
        if (!empty($X_FORWARDED_FOR)) {
            $REMOTE_ADDR = trim($X_FORWARDED_FOR[0]);
        }
    }
 
    /*
    * Some PHP environments will use the $_SERVER['HTTP_X_FORWARDED_FOR'] 
    * variable to capture visitor address information.
    */
    else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $HTTP_X_FORWARDED_FOR= explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        if (!empty($HTTP_X_FORWARDED_FOR)) {
            $REMOTE_ADDR = trim($HTTP_X_FORWARDED_FOR[0]);
        }
    }
 
    return preg_replace('/[^0-9a-f:\., ]/si', '', $REMOTE_ADDR);
}
add_filter( 'pre_comment_user_ip', 'dr_filter_get_real_comment_ip');

友情提示,Dragon 主题已经修复了这个问题。

Dragon 主题:带用户中心和商城系统的博客 CMS 高级 WordPress 主题 V5.3.0-BG
Dragon 主题:带用户中心和商城系统的博客 CMS 高级 WordPress 主题 V5.3.0

Dragon 主题:带用户中心和商城系统的博客 CMS 高级 WordPress 主题 V5.3.0

1 前言 Dragon 主题(演示网站:www.ilxtx.com),一款强大的多功能高级 Wordpress 商城会员主题,自适应响应式 HTML5+CSS3,兼容 Firefox、Chrome、...

WordPress 额外配置

根据 @老头 反馈,使用 CloudFlare 等 CDN 代理时,需要额外再修改 Wordpress 的配置文件 wp-config.php,在里面加入下面代码才能起效果:

// WordPress 使用 CDN 后获取访客真实 IP
if( !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
    $get_HTTP_X_FORWARDED_FOR = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    $_SERVER['REMOTE_ADDR'] = trim($get_HTTP_X_FORWARDED_FOR[0]);
}

其他参考

wordpress 使用 CDN 后获取访客真实 IP
NGINX,PHP 获取 Cloudflare 传递的真实访客 IP 配合宝塔面板防御 CC 攻击 防伪造 IP - 笨牛小白成长之路
CloudFlare 并通过 PHP 记录访问者 IP 地址 - ITranslater
Nginx 在 CDN 加速之后,获取用户真实 IP 做并发访问限制的方法 | 张戈博客
使用 CDN 之后如何找出用户的真实 IP 地址 - 燕闻墨香

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

2021-08-04

2021-11-24

发表评论

表情 格式 贴图 链接 私密 签到
Dragon主题购买阿里云特价云服务器1核2G低至86元,N4共享型服务器3年仅需799元腾讯云特价云服务器1核2G 88元/年 2核4G3M688元/3年,更有千元代金券礼包免费领!
评论
正在努力加载中...
扫一扫二维码分享
×
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn more
Dragon