微信域名防封、域名防红原理分享以及技术详解
发布于 4 年前 作者 along 2532 次浏览 来自 分享

下面这个界面相信大家或多或少都有看到过:





出现这个界面就是我们访问的域名被微信拦截后导致其不能在微信内正常访问。

微信内域名被拦截的原因有很多种,除了一些确实存在违法、违规行为的页面。一些正常的页面也会因为被误监测或是恶意投诉导致被微信封禁、停止访问。

就连腾讯的亲儿子拼多多的链接也受到封禁,在相当长的一段时间里域名都是被封禁的状态,最后不得以包括淘宝、抖音在内的很多互联网头部公司,都将各自的推广、分享链接换成口令或是小程序的形式进行分享传播。

由此可见《微信外部链接内容管理规范》的严格程度,以及微信清洗内部流量池和维护用户体验的决心。

大厂们自然有足够的技术实力去应对微信的各种政策,但是,一些经验相对不丰富的中小公司就真是叫天天不应,叫地地不灵了。

自从微信严格打击外部链接以后虽然微信生态环境确实被净化了很多,但是也存在着很多误封或者恶意投诉导致很多正常网页被封禁。

这些网站有的是基于微信的社交论坛、有的是合法的产品展示页面,当这些页面被误伤后,如果不能及时恢复的话,对于公司的损失无疑是惨重的。

于是,微信域名防封服务也就应运而生,打着为中小企业解决域名被封禁,节约运营成本的名号光明正大的开始割韭菜。

很多企业也就病急乱投医,每年交着动辄几万、十几万的 “保护费”,不但不一定能有效果,还经常被服务商卷钱跑路。

今天我们就来深入的聊一聊微信域名防封,以及其实现原理。

首先,100% 防封是一定不存在的。

这事稍微仔细想一想就知道不可能,除非是腾讯专门负责外部链接的部门说的【狗头】。

第三方做的微信域名防封只能做到尽量的延长域名的生存周期,以及做到在域名被封后通过技术手段能够让用户正常访问,在用户的角度上用户是发现不了域名被封的,从而不影响公司正常业务,减少公司损失。

接下来我们来说一下常用的防封技术,以及其实现原理。





(微信域名防封常用技术)

一、入口域名不死(活码)

很多做入口不死域名的服务商都宣称自己的技术如何牛逼,效果多么好。其实就算说的再天花乱坠,原理都很简单,甚至往简单了说就是几行代码的事。



(通过 js 简单实现活码的功能)

简单说一下入口不死域名(活码)的原理。

入口不死域名就是保证我们推送给用户的域名处于一直能打开的状态,避免我们推送至用户的链接、二维码被封禁,导致用户无法打开,从而提升推广效率、节约推广成本。

其原理就是把我们推广的的内容放在落地域名上,推广给用户的链接或二维码使用入口域名(入口域名使用短网址隐藏掉原有网址),再通过入口域名跳转至落地域名,保证入口域名没有违规内容,或由于入口域名跳转至落地域名的时间很短再加上使用短域名隐藏掉了原有网址,用户没有办法恶意举报入口域名,把我们的域名封禁,从而保证入口域名一直处于存活状态。

举个例子,我们现在有 A 域名、B 域名和 C 域名三个域名,我们把我们要推广的内容放在 B 域名上,但是我们推送至用户的域名,或域名生成的二维码是 A 域名。用户打开页面时需要打开 A 域名,然后 A 域名通过类似上面的代码跳转至 B 域名,这样即使 B 域名被封禁,由于 A 域名本身没有违规内容,加上短网址隐藏掉了原有域名,用户也没办法恶意举报,就能保证 A 域名的存活。

再配合自动检测、轮换,如:实时检测 B 域名(落地域名)的状态,如果 B 域名被封禁,自动将 A 域名(入口域名)由指向 B 域名改为指向 C 域名,就能保证用户一直可以正常打开我们推广出去的页面或二维码。同时还可以配合防检测、防投诉、防跟踪等技术屏蔽掉各个环节的人工、机器检测以及用户的恶意举报。

还有一种狸猫换太子的办法:A 域名是入口,落地域名是 B,限制 B 域名显示的内容,必须从入口 A 来的才显示目标内容,直接打开 B 网址,显示正常的内容或无内容,用户投诉 B 域名,后台审核人员打开 B 显示的内容完全正常,及时用户举报也是无效的。

二、短域名多级跳转

短域名多级跳转的意义在于分担风险,增加检测和追踪的难度,同时多级跳转中任何一级域名被封禁后都是可以通过自动检测 + 自动轮换去自动更换被封域名,让用户感觉不到域名被封禁。

而使用短域名的意义在于,短域名相对于长域名来说更简洁、美观,短域名生成的二维码也更简洁。短域名可以自己生成也可以使用第三方的服务,据说一些大厂提供的短域名 API 生成的短链接的存活时间要比原有链接更长一些,不过实际应用后个人感觉其实差不多。

这里也分享一个我认为比较好用的 — 新浪短网址的官方文档:

https://open.weibo.com/wiki/Short_url/shorten

使用自己的短域名服务也很简单,网上已经有各种语言的短链接生成代码可以参考,短网址生成的大概原理:

  1. 客户端提交长网址,例如:
  2. http://aaa.com/bbb/ccc.html?abc服务端根据我们自己生成的一个无规律的短网址码表,查询这个域名是否存在,如果不存在就生成短网址 http://aaa.com/qsfres,并将 qsfres 跟长网址 http://abc.com/ddd/xxx/a.html?dsada 的映射保存起来,然后将该短网址 http://aaa.com/qsfres 返回给用户。用户浏览器中请求 http://abc.com/sdjffd,会先解析 http://abc.com 的 IP 地址。然后客户端用 qsfres 发起 GET 请求。服务器收到 GET 请求,根据 qsfres 对应的 id 查找码表中对应的长网址,并返回 sdjffd 映射的长网址。客户端收到长网址后,使用 301 重定向到长网址。

三、被封域名实时检测、自动轮换

被封域名检测可以让我们第一时间发现域名被封禁,第一时间更换域名。

被封域名检测的方式有很多中,查阅了一些相关资料,发现真的是八仙过海各显神通,竟然还有直接识别封禁页面上那个红色的感叹号的方式……

目前最简单的方式是通过请求

http://mp.weixinbridge.com/mp/wapredirect?url=% s&action=appmsg_redirect&uin=&biz=MzUxMTMxODc2MQ==&mid=100000007&idx=1&type=1&scene=0

微信会进行重定向,只要拿到重定向的地址就能判断,重定向到你的域名那就是正常,重定向到 weixin110 的地址那就是被封了。

这里贴一下 Java 的实现代码:

import okhttp3.OkHttpClient;

import okhttp3.Request;

import okhttp3.Response;

import java.io.IOException;

public class WxChecker {

  private static final String CHECK_URL_HEAD = "http://mp.weixinbridge.com/mp/wapredirect?url=";

  private static final String CHECK_URL_TAIL="&action=appmsg_redirect&uin=&biz=MzUxMTMxODc2MQ==&mid=100000007&idx=1&type=1&scene=0";

  public static boolean checkUrl(String url) throws IOException {

    String curl = CHECK_URL_HEAD+url+CHECK_URL_TAIL;

    OkHttpClient okHttpClient=new OkHttpClient();

    Request request=new Request.Builder().url(curl).addHeader("User-Agent","Basic "+"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36").build();;

    Response response = okHttpClient.newCall(request).execute();

    String location = response.body().string();

    return location.contains("已停止访问该网页")?false:true;

  }

  public static void main(String[] args) throws IOException {

    String res=checkUrl("http://www.0vzf.cn/")==true?"正常":"不正常";

    System.out.println(res);

  }

}

自动轮换域名就直接根据域名状态进行判断,如果域名被封就把指向地址更换一下就好。

四、自带浏览器打开





(提示使用自带浏览器打开)

这种方式多用于 APP 推广或是一些不基于微信生态的页面,原理也很简单,安卓端可以直接识别用户的客户端,如果判断用户是在微信中打开的链接,则自动打开系统手机浏览器来打开链接。如果是在手机浏览器打开,则正常访问。

IOS 用户就要用到上图中的遮挡图片了,需要判断用户是否在微信中打开,如果在微信中打开就要用图片遮挡来提示在浏览器中下载。

js 判断当前页面是否在微信中打开代码:

var is_weixin = (function(){return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1})();
    if(is_weixin){
    $(function(){
return true;
          });
}else{
       $(function(){
return false;
       });
      }

关于如何在安卓微信中直接调用自带浏览器,做这个服务的服务商很多而且要价很贵,但是原理其实就是判断是否在微信内打开,如果在微信内打开就返回一个文件,微信浏览器对于不支持的格式会调用手机里第三方应用,如果手机里只有一个浏览器会默认打开,否则就会直接返回下载链接。

提示使用自带浏览器打开的代码这里就不贴了,网上一搜一大把。

五、被封域名恢复

两种方式:iframe 和代理访问。

iframe 实现被封网页恢复就是把被封网页嵌套到其他的网页上。

这里分享一篇写的比较好的文章,里面有详细的教程:

https://blog.csdn.net/u011280778/article/details/96477284

代理访问恢复被封网站的原理就是在浏览器和 Web 服务器之间加了一台代理服务器,当用户通过代理服务器访问时,浏览器不是直接到 Web 服务器去取回网页,而是向代理服务器发出请求,由代理服务器来取回浏览器所需要的信息,并传送给用户的浏览器。 从而实现被封网页恢复。

但是通过代理访问恢复成本比较高,需要租一台额外的服务器,所以使用这种技术的大部分都是一些黑产,还有极特殊情况,需要紧急恢复的人。

六、DNS 防封

DNS 防封其实就是屏蔽掉一些 ip,让一部分人或机器不能访问你的页面。

比如:恶意投诉的人、审查人员、自动检测的机器等。

ip 黑名单需要自己搜集,直接在 nginx 配置即可。

location / {    allow 111.111.1.11;    deny all; }

七、入口网址 “阅后即焚” 防跟踪

这个技术其实就是防止用户找到你的入口域名,js 实现方法如下:

history.pushState(null, null, document.URL); //禁止网页返回上一页
      window.addEventListener('popstate', function() {
        history.pushState(null, null, document.URL);
      });

还有一种方式就是禁止微信外部网站访问,我们判断用户是否使用外部浏览器打开,如果用户使用外部浏览器打开就禁止访问,或者直接跳转至一个无关页面。

八、落地域名限制区域访问

限制域名访问区域,可以防止恶意投诉或者审核人员的审核,比如我们这个活动在北京开展我们就可以只允许北京地区的 ip 访问,或者屏蔽掉深圳(你懂的),让深圳地区的人无法访问或者访问其他页面。

通过下面的代码,我们就可以获取到 ip 和城市名。不过为了保证网站的打开速度,还是推荐大家把 ip 数据库下载到本地进行比对,这样网站的打开速度会快一点。

       document.write(returnCitySN["cip"]+','+returnCitySN["cname"]) 

九、防投诉

在我们的网站应用本文中的技术后,其实已经能有效的提高域名的存活时间了,但是防投诉才是最重要的一道关卡。





(图片来源自网络)

防投诉要做主要就是屏蔽官方的投诉按钮,或者让按钮无法点击。这个部分确实比较复杂,而且微信经常更新补丁,不是三言两语能讲明白的,所以这里就不展开说了。

另一个需要做的就是做一个假的投诉悬浮窗,做一个假的投诉界面,可以过滤掉一些小白用户的投诉。这个相关源码网上也能搜到这里就不贴了。

十、防攻击、劫持

有时即便我们的网页没有违规内容,也会因为网页被攻击劫持导致被误封的情况出现。

防攻击劫持最简单的方式就是把 http 换成 https,让 Nginx 开启 HSTS 让浏览器强制跳转 HTTPS 访问,还可以使用一些高防 CDN 过滤掉一些乱七八糟的东西,让我们的网页更安全。

十一、小技巧补充

最后补充一些小技巧。比如;落地域名使用泛域名,泛域名每次打开都是不同的网址,这样做的好处就是即使域名被封也是二级域名,能够节约成本。

以上这些就是一些常用防封技术以及其实现原理,如果有相关问题可以在评论中指出,更多干货分享请持续关注。

1 回复

无需跳转、无需短链接、无需借助三方平台、无需选择外部浏览器打开。自有域名微信内部直接访问,防封 抗诉!需要查看案例的V: ceocno

回到顶部