近期,或许是相应相关政策号召,淘宝开始实行“绿网计划”,屏蔽掉“不适合未成年人查看”的商品。
被屏蔽的商品主要有游戏装备,游戏账号,数码产品(比如Windows的DTS和杜比音效),成人用品等。
通过“绿网计划“,未成年人便无法访问商品页面,看不见商品的信息,自然也就没法购买了。
作为一个懂技术的人,便想通过一些技术手段来规避掉这个恶心的机制,不要求能够直接成功下单,好歹让人能看见商品详情页面,这样方便通过第三方代购等其他渠道购买。
那么,废话不多说,开始分析!
初步分析
首先,在使用PC浏览器打开一个”绿网计划“内商品页面的时候,会短暂地【闪现】一下正常的商品页面,然后页面迅速被替换为”绿网计划“的页面。那么,先看看HTML的结构——
可以看见,HTML页面被完全重写了,什么内容都没有剩下。作为一个熟悉Javascript的人,推测使用了 location.href 来直接重定向。这回我们眼疾手快,抢在页面重定向之前下了JS断点——
在断下来之后,检查控制台的网络选项卡,众多请求中能看到一串关键的JSON,也就是上图中所示。
这下我们就明确了”绿网“的逻辑了,也就是重定向。进一步下断点分析,我们看到了详细代码逻辑——
这下,我们的目标就很明确了——需要通过某种手段让这里的重定向失败!
解决方案
要想阻止页面的重定向,有多种解决方案,不同的解决方案优点不同
各位读者可以自行选择解决方案,本文会一步一步地将解决方案的实现步骤写出来。
目前已发现的解决方案有如下3个。
解法1# 网络请求阻止(推荐)
鉴于location.href的特殊性,现行的浏览器不可能对location对象进行劫持,所以不能通过js层面的hook来阻止页面的重定向。如果非要修改,那也只能从浏览器内核层面修改,属于是杀鸡用牛刀了。
我们注意到,访问的url是从上方的sibData中获取来的,那么先小试牛刀,用浏览器自带的”网络请求阻止“来强行截掉这个sibData。这样一来重定向的url便无从获取——
嘿!在阻挡这个sibData的获取后,页面可以正常访问了!
那么我们在本地的代理软件或者防火墙(这里的示例是V2rayN)处配置一个简单的block,阻挡这个域名下所有的请求,就可以一劳永逸啦!
解法2# 浏览器脚本本地替代 (较繁琐)
这个方法比解法1复杂,但是比下一个解法要简单。注意,本解法只适用于Chromium内核的浏览器!
本解法采用了Chromium内核支持的一个开发功能,即页面资产的本地替代。
接下来将分步骤演示本解法的最速实现过程:
准备工作,打开淘宝网页版,登录你的淘宝账号。然后在本地目录下新建一个空文件夹作为备用,记住这个文件夹的名字和位置。
第一步,打开新的标签页,然后提前打开浏览器的F12开发者工具备用。
第二步,在地址栏输入一个淘宝(不是天猫)正常商品页的链接。(不要使用被绿网计划屏蔽了的商品链接,否则操作难度增加)
第三步,访问你输入的链接,因为这个链接没有被屏蔽,所以页面会正常加载。你会在开发者工具中看到很多内容。
第四步(重要),打开”网络(Network)”选项卡,你会看见很多网络请求,在上方的筛选器中输入:
??index-min.js
敲击回车后,会看见一个请求被筛出来,如图:
第五步(重要),打开开发者工具的“源代码(Sources)”选项卡,然后在开发者工具栏的左上方打开“覆盖(Overrides)”选项卡,点击下方的“选择替代文件夹(Select folder for overrides)”按钮。将会弹出一个窗口要求你选择一个文件夹,接着,找到你提前建立好的空文件夹,点击确认,然后再在上方的权限确认中点击允许(Allow),如图。(示例中这个文件夹的名字叫”substitute”)
到此为止,你应该会看见:
第六步(重要),回到网络选项卡,右键单击你筛选出来的唯一那个的请求,然后在右键菜单中选择“保存以备替代(Save for overrides)”
第七步(关键),第六步完成之后,开发者工具会自动跳转到源代码窗口,显示出一个代码文件。找到这个文件的第1949行(如果和下图不一样,那么上下找找。如果你的文件显示得密密麻麻,那么点击下图所示的位置来格式化代码),然后按照下方第三张图所示,注释掉这一行内容。最后按Ctrl+S,保存你的修改。
不要忘记保存,确保修改之后按Ctrl+S保存修改!
到此为止,修改就结束了!
最后,不要关闭开发者工具,在浏览器地址栏输入一个绿网计划保护的页面并访问,你会看见页面正常加载,不会跳转到绿网计划。
以后如果你想绕过绿网计划,那么先打开F12开发者工具再访问,就不会跳转到绿网计划的页面。
解法3# 中间人攻击 (较繁琐)
这个方法操作性较上一个差一些,不过也是最具技术性的方法。
从上文我们得知,sibData本质上是一个JSON请求。
比起直接阻挡这个请求,可以通过对请求发起本地中间人攻击来篡改请求内容,这样对网页内容的影响相对较小(虽然我个人是无感)
要发起中间人攻击,可以自己写程序,也可以使用现成的工具。为了方便,这里使用广为人知的Fiddler。
首先,在Fiddler内启用下行断点,然后在浏览器内打开商品标签页。第一个请求将会是HTML的请求,手动放行这个请求。
接着,Fiddler会收到一系列请求,在请求序列中找到 detailskip.taobao.com 。如下图所示。
双击这个请求,在右侧菜单里能看见请求的内容。这个时候需要考验各位读者的手速如何了,因为淘宝页面js发起的请求有超时时间(大概是十几秒),接下来需要在十几秒的时间内完成如下操作:
第一步,在数据中找到redirectUrl这个键值对,如下图。
第二步,删除掉引号内的全部内容,如下图。
第三步,放行你篡改过的这个请求,点击 “运行到完成”,如下图。这样网页前端的JS就收不到任何重定向链接,也就不可能重定向到绿网计划页面了。
最后,取消下行断点,放行所有其他请求。
至此,你就完成了一次中间人攻击。回到浏览器,商品页会正常加载,不会跳转到绿网计划。
如果你很熟悉fiddler脚本,你可以尝试编写一个脚本来自动地执行这个过程,这样可以让你解放双手。本文就不再涉猎了。
验证成果
如果你认为你已经成功地完成了上述3个解法的任意一个,可以尝试验证一下。
注意,直接搜索绿网计划内的商品是行不通的,因为淘宝的搜索会屏蔽掉相关词条和产品。
本文在此提供一个链接,你可以通过直接访问这个链接来验证你的成果。
特别声明,本站并没有为这个链接打广告,也从来没有收受过任何商业赞助,所以请不要质疑这个部分的正当性,不推荐购买该链接所指向的商品。
最新内容
近期又发现,部分天猫商品也会被绿网计划管控。而且与普通淘宝网店不同,无法通过解法1解决,但可以通过中间人攻击解决。
针对天猫商品,可以通过退出登录的方法自由登入商品页面。因此,目前无需进一步分析。
写在最后
淘宝搞”绿网计划”属于是防君子不防小人。我个人通过这个方法看到商品详情后,经过尝试,发现是不能直接下单的(会失败),仅仅能够看到商品的价格等信息。
不过这样已经足够了,各个平台上都有相关代购服务,只要能看到商品信息,绿网计划就彻底成了摆设。完全可以通过代购购买,绿网计划阻挡的只是”挑选商品“这个过程。
不过,从另一个角度看,绿网计划也有其存在的合理性。毕竟也不是所有的未成年人都会JS和Web前端的相关计算机知识,能够挡住大多数未成年人,绿网计划也算是达到其目的了。
我为什么解法2的第四步筛选不出那个东西,没找到
@cangshu: 一样 这个大佬还在么 这个淘宝想要充游戏也充不了
@shisan: 淘宝近期更新了站点的架构,目前还没有抽时间分析,我会尽快分析。
篡改后是无法进行购买操作的
这里演示一段py自动篡改的代码
import mitmproxy.http
from mitmproxy import ctx
from mitmproxy import flowfilter
import json
class Interceptor:
def __init__(self):
self.filter = flowfilter.parse(“~u https://h5api.m.taobao.com“)
def response(self, flow: mitmproxy.http.HTTPFlow):
if flowfilter.match(self.filter, flow):
try:
t = flow.response.json()
t[“data”][“pcTrade”][“redirectUrl”] = “”
t = json.dumps(t)
flow.response.content = bytes(t,encoding=‘utf8’)
except:
pass
addons = [
Interceptor()
]
使用mitmweb –listen-port 8888 –web-port 8848 -s main.py命令启动然后安装证书配置代理即可
谢了,哥
手机淘宝呢?可以通过Surge之类的东西重写拦截跳转吗
大佬有办法过滤掉天猫商品吗,-天猫/tmall 不好用了
有个外区账号下载淘宝lite就能解决
能看不能买,更难受了
哇 太强辣
十分感谢
可以通过油猴脚本来拦截这玩意吗🤔
@Dreaminko: 我当然尝试过,location.href重定向目前没有好的办法通过JS拦截,location这个原生对象是不可重新定义的,没办法写钩子。
我也试过用window.onbeforeunload事件,但是….
因为这个重定向是一瞬间的事情,所以没有机会执行onbeforeunload。
所以文章中提到,用JS基本是无解的。
@Dreaminko: 但是捏,即使JS没办法钩住,仍然有一个曲线救国的办法。
那就是浏览器开发者工具的”本地覆盖”功能,可以先把淘宝页面的js下载下来,自行修改源代码,然后用本地覆盖把这个js文件覆盖成修改后的。
不过这个方法的操作性太差,我还在考虑要不要也写进文章里。
感谢大佬 文章非常有用
多谢,很大的帮助