申禅姌 发表于 2024-5-25 15:01:01

短链接、防红实现原理详解

本帖最后由 申禅姌 于 2024-5-25 15:01 编辑

## 名词解释:
### 1.短链接
顾名思义,短链接就是“短”的链接(废话),当我们在互联网上浏览时,发现一篇非常有教育意义的文章,或者一个活动页面, 想要发送给我们的好朋友,最简单的办法就是复制网址,然后去QQ微信粘贴,这样可以,但效果不是很好,因为我们从浏览器上复制的网址,通常都很长,例如下面这样↓
> https://www.msn.cn/zh-cn/news/other/2025-%E5%B9%B4-10-%E6%9C%88%E7%BB%88%E6%AD%A2%E6%94%AF%E6%8C%81-%E5%BE%AE%E8%BD%AF%E6%9B%B4%E6%96%B0%E6%94%AF%E6%8C%81%E9%A1%B5%E9%9D%A2-%E6%95%A6%E4%BF%83-win10-%E7%94%A8%E6%88%B7%E5%8D%87%E7%BA%A7/ar-BB1n0MGe?ocid=msedgntp&pc=W037&cvid=665158dcfbf94f4aa4e4685ced28fdfc&ei=10

!(data/attachment/forum/202405/25/112620wb5v6b7b88vksv3x.jpg)

***

这就是短链接存在的意义,【把长的网址缩短】,我们可以很轻松的从百度上搜索到各种短链接在线生成的网站,他会把你的长链接缩短到一行,例如:
> 这是一个很短的链接→http://t.cn/A6H9sJ0x

!(data/attachment/forum/202405/25/113126k9gk8aodvrr0ksou.png)


***
怎么实现的呢?很简单,就是你把长链接给他,他把链接存储在自己的数据库内,然后为这个链接取个名字,例如“A6H9sJ0x”,然后使用他自己的服务器进行重定向。
例如:t.cn 是他的服务器,t.cn/A6H9sJ0x就是服务器+名字,用户访问这个网址以后,他根据名字去自己的数据库查找这个链接,然后在页面上跳转,网址缩短功能就实现了

***

#### 2.防红
当我们在QQ、微信的聊天窗口内点击一个网址时,他会在APP内部打开一个浏览器窗口,让你留在APP里面,这样他就可以监控你所访问的页面,当你试图访问一些不正规网站的时候,他就会拦截。

***
!(data/attachment/forum/202405/25/114849qabeadad1reoddqj.png)

***
把这样的一个链接发给朋友,不仅没有起到分享作用,反而会让你的朋友感觉你“不正经”,如果你是某个网站的老板,给客户发送这样一条推广链接,后果可想而知。

QQ、微信这样做的目的是为了“保证用户安全”,但实际上你会发现,可以正常访问的链接通常都是站长主动去申诉,甚至是“交了保护费”。QQ微信服务器虽然会自动识别访问的网站,检测他是否违规,但误伤率极高,这对很多小网站非常不友好。

在此前提下,防红技术应运而生,防红通常是和短链接一起应用,当用户访问一个短链接时,他不会第一时间跳转到对应的长链接,而是先检测用户浏览器环境,当发现用户在使用QQ、微信内置浏览器时,跳转到一个中转页面,提示用户在浏览器打开页面,相信大家日常上网中也遇到过。

!(data/attachment/forum/202405/25/121522soho18o1ydruocyh.png)

当然,还有更高级的,不会引导用户在浏览器打开,而是直接在微信内显示正常内容,这是比较高级的操作,后面会讲

## 实现原理:
### 1.短链接
短链接的实现原理很简单,就是服务器储存+转发,而重点就在于“短”,想要拥有一个1-2位数的短域名就不是钱能解决的问题了,这其中最为知名的就是**新浪短链接(t.cn)** 。
!(data/attachment/forum/202405/25/123637q3age5ag3a64223m.png)

新浪的短链接服务之前还是开放的,后来由于监管问题只允许微博等内部使用了,用户在自家产品内发帖时,服务器会自动把帖子中的网址转换为t.cn的短链接,虽说不开放,实际上还是有很大的操作空间,使用一些技术手段还是很好实现的,所以现在市面上还是有不少可以直接生成t.cn短网址的产品。

另一个比较知名的就是**百度短网址(dwz.cn)**,这个看起来就没有新浪那么厉害了,因为他的域名长度是5位数,新浪是极限3位数,一寸短一寸险,百度目前可以合作对接。
### 2.防红
防红技术可谓是八仙过海、各显神通。域名被红,主要原因是QQ微信检测到了,判断不适合用户访问,导致用户在APP内点击链接无法直接访问对应网站,QQ微信对链接的处理方法具体有以下几种情况(以QQ为例,实际微信更严格):
#### 1.红色,禁止用户访问
这种情况起不到一点推广作用
!(data/attachment/forum/202405/25/114849qabeadad1reoddqj.png)
#### 2.蓝色,提示用户复制到浏览器
这种情况会留住一小部分用户
!(data/attachment/forum/202405/25/124537dcxy8afyecxq32ai.png)
#### 3.蓝色,询问用户是否继续访问
这种情况通常不用担心
!(data/attachment/forum/202405/25/124628hzdox2500p52onvv.png)
#### 4.绿色,用户点击链接可以直接访问
这种情况最好了
没图😄

***

无论你是大中小站长,还是黑灰产大哥,你最希望的当然是无论用户在哪里点开你的链接,直接就能访问,那么接下来我就理论+实践讲解如何防红。
**备注:防红是一门大学问,我只是入门选手,奇技淫巧众多,能用的防红就是好防红**

首先,你要确保,无论你如何操作,只要是在QQ微信内打开的网址,一定要是腾讯白名单网址,这条没有例外,因为你代码写得再好,他也会在访问前检测你的网站域名,域名不行啥都白搭。

#### 1.引导用户跳转的防红
短网址服务需要使用qq白名单的域名,例如dwz.cn,t.cn这两个短网址属于百度、新浪旗下。qq微信不会封禁,但由于滥用,也有可能无法直接访问,直接访问会变成蓝色状态。所以可以选择比较冷门的跳转服务,只要是正规公司有备案的网址大多数都能在APP内直接访问,也可以自己制作一个个人简介网站,看看腾讯会不会允许访问,如果不行就去腾讯那里申诉。
**腾讯网站拦截申诉:(https://urlsec.qq.com/complain.html)**

注意,腾讯关于网址拦截有很详细的规定,你用来申诉的网站必须是**完全合规**的,如果你直接使用业务网站来申请,如商城、论坛等,八成不会通过,还有可能直接拉黑,所以你用来申请的只是一个内容单一,完全符合各项规定的网站,最好是非交互网站(静态页面,只能看不能互动的)
!(data/attachment/forum/202405/25/132948f9ryjnlz1yzmntlm.png)

***

第二步就是检测用户浏览器,在搞定域名检测后,用户访问时检测用户的浏览器,通过js或者服务器后台检测用户的useragent,js代码如下所示:
```
const ua = navigator.userAgent.toLowerCase()
if(ua.includes('qq')){
console.log('正在使用QQ')
}else if(ua.includes('micromessenger')){
    console.log('正在使用微信')
}else{
console.log('正在使用其他浏览器')
}
```
在用户使用QQ微信的时候就可以直接要求用户在其他浏览器打开,在检测到其他浏览器的时候直接跳转对应网站就行了。
**流程如下:用户访问绿色网站→检测useragent→要求其他浏览器或直接跳转**

***
## 案例展示:
关于引导用户打开浏览器的防红,我没有找到示例,下面只讲规避域名检测的示例
#### 示例1:
为以下链接生成短网址:
> https://www.msn.cn/zh-cn/news/other/2025-%E5%B9%B4-10-%E6%9C%88%E7%BB%88%E6%AD%A2%E6%94%AF%E6%8C%81-%E5%BE%AE%E8%BD%AF%E6%9B%B4%E6%96%B0%E6%94%AF%E6%8C%81%E9%A1%B5%E9%9D%A2-%E6%95%A6%E4%BF%83-win10-%E7%94%A8%E6%88%B7%E5%8D%87%E7%BA%A7/ar-BB1n0MGe?ocid=msedgntp

生成的短链接:
> http://t.cn/A6H9sJ0x

直接访问这个短链接,浏览器网络请求如下:
!(data/attachment/forum/202405/25/134942bu83gzig8vg6yzet.png)
首先访问了http://t.cn/A6H9sJ0x网址本体,然后302跳转到了一个奇怪网址:
> http://nos.netease.com/music-contract/781d12030c9ba100032bb823f71f89d2.xhtml?/x7CaR9

可以看到,t.cn短网址并没有直接跳转到长链接本体,而是网易的一个网址,这是短链接生成网站的一个骚操作,因为t.cn是新浪旗下的,我非法对接了新浪短网址,新浪也会对传入的长链接进行检测,所以我不能把长链接直接对接到t.cn上,如果新浪检测到了非法对接,撤回这条短链接,对于我和我的用户来说是无法挽回的,所有推广工作都会白费,所以我直接将网易的网址对接到新浪上,网易是正规公司,可能会规避掉新浪的检测机制。
新浪那边没问题了,我这边问题大了,访问t.cn直接跳转到网易去了,我怎么办,我不想让用户访问网易啊,这就属于**奇技淫巧**的范畴了,如下图所示,网易的链接返回了如下内容:
!(data/attachment/forum/202405/25/135138m76nap77m297mdaa.png)
网易的页面引用了一个奇怪的js文件,接下来看一下js文件内都有什么:
!(data/attachment/forum/202405/25/140400sx2dq2miw92dzpcs.png)
他首先从网易的链接中获取了查询字符串,在本示例中就是“x7CaR9”,然后携带参数访问了https://mqeir.cn/getres.php接口
接口返回如下:
!(data/attachment/forum/202405/25/140648henkgihihikvbuiu.png)
这样就是返回我们自己的长链接了,再看js内的代码,使用self.location.href = data.url;实现了页面跳转到自己的长链接

***

在本示例中没有实现检测微信QQ,而是直接跳转,并没有防红功能,但展示了一种短链接策略,使用了netease.com这个白名单域名,不仅能通过QQ微信的域名检测,还能通过t.cn的对接检测,实现了t.cn可以跳转到任意第三方网址的功能。
这里面的难点就是:**如何让网易的页面执行我想要的操作**
我不知道,这属于XSS的范畴,当然这也是防红的核心,你只要掌握了,就能做到绿色域名跳转。
#### 另一个示例:
这个示例并没有短链接,但实现了在QQ微信内直接打开对应网站并且规避域名检测
网址如下:
> http://13504613.cars.org.cn/upload/avatar/thumb_1715756549572.html?data=7TkogUtQf6sWR5oAU9hiWKzLuDIZpzuUOMJ-p7ca5351468VYzGuDPJ1MpanzKxY

网址很长,可以看出来主域名是http://13504613.cars.org.cn/,打开发现是中国空气动力学会官网

!(data/attachment/forum/202405/25/142846h4shx414hwi4hihj.png)

很显然,这个防红链接通过某种方式让**中国空气动力学会官网**帮他做事,当QQ、微信检测此网址时,发现是中国空气动力学会,就会直接通过,现在我们再来看看具体代码实现,页面代码如下:
!(data/attachment/forum/202405/25/143149oee0e004e1e806e6.png)

***
他的js代码仍然是通过请求一个第三方网址,根据url参数内的名字寻找对应的长链接,但是这个页面并没有直接跳转,而是使用了iframe,将实际链接显示在iframe内,因为是动态加载,QQ微信不可能知道实际内容了,只能针对性的检测或者人工审核。


***
#### 总结下来,短链接难度不高,难点在于通过QQ微信的检测,可以诱导用户打开其他浏览器,也可以使用奇技淫巧,让合法的网站帮我干不合法的事,这也是防红的精髓,八仙过海,各显神通,找到了一个好方法,你也能做防红

展示一个超星学习通的例子
> (https://detect.chaoxing.com/api/monitor_temp?refer=http%3A%2F%2Fbbs.tampermonkey.net.cn&from=&mes=%E7%82%B9%E5%87%BB%E7%A1%AE%E5%AE%9A%E8%B7%B3%E8%BD%AC%E8%87%B3%E6%B2%B9%E7%8C%B4%E4%B8%AD%E6%96%87%E7%BD%91)
>
此网址属于超星,但访问后会跳转至油猴中文网

李恒道 发表于 2024-5-25 16:05:53

思路清晰操作流畅
而且又感觉很有意思
好文!

潘钜森 发表于 2024-5-25 20:58:13

ggnb!

hysaoh 发表于 2024-6-1 18:01:37

写的太好了,ggnb

王一之 发表于 2024-6-1 23:54:08

这么骚
页: [1]
查看完整版本: 短链接、防红实现原理详解