Press "Enter" to skip to content

Nginx配置仅让微信服务器访问

最近利用开源项目搭建了一个小程序,后端代码担心有注入风险。于是想通过nginx做下访问限制,仅让微信服务器可访问项目,其他禁止访问。

先看下微信的访问日志:

125.33.88.243 - - [29/Sep/2020:14:51:31 +0800] "GET /api/getDetail.php?id=1 HTTP/1.1" 200 671 "https://servicewechat.com/wx4b89a5dd2d892e01/devtools/page-frame.html" "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.02.2004020 MicroMessenger/7.0.4 Language/zh_CN webview/"

推荐方案一

配置referer

server {
    listen       80;
    server_name  your_site.com;

    location / {
        # 推荐方案
        # 匹配 referer 为空、防火墙伪装、微信域名
        # valid_referers none blocked *.servicewechat.com;

        # 仅匹配 微信域名
        valid_referers *.servicewechat.com;
        if ($invalid_referer) {
            return 403;
        }
    }
}

备选方案二

通过 user_agent 实现

server {
    listen       80;
    server_name  your_site.com;

    location / {
        # 备选方案,通过 user_agent
        if ($http_user_agent !~* "MicroMessenger") { 
            return 403;
        }
    }
}

二合一方案

server {
    listen       80;
    server_name  your_site.com;

    location / {
        set $flag 0;
        # 匹配 referer 为微信域名
        valid_referers *.servicewechat.com;
        if ($invalid_referer) {
            set $flag "${flag}1";
        }

        # 通过 user_agent
        if ($http_user_agent !~* "MicroMessenger") { 
            set $flag "${flag}2";
        }

        #逻辑与实现方式
        if ($flag = "012"){
            return 403;
        }
    }
}

注:该方式仅从 Referer 和 User-Agent 来做的限制,如果对方伪装仍可继续访问

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code