前言
最近群友偶然提到在 B 站发现一种挂羊头卖狗肉的链接,具体表现为链接显示的是一个视频的标题,但是点进去实际跳转播放的是另一个视频(结合日期,你应该能想到是什么视频)。
现象分析
检查渲染出来的链接如下:
1 | <a style="--icon-width:1.2em;--icon-height:1.2em;" href="//www.bilibili.com/video/BV1xxxxxxxxx/../BV2xxxxxxxxx" target="_blank" data-type="link"><img src="https://i0.hdslb.com/bfs/static/placeholder.png" loading="lazy" style="width:var(--icon-width);height:var(--icon-height);vertical-align:var(--icon-vertical-align);"> |
可以看到链接的 href 属性中有一个 ../,典型的路径穿越。浏览器在解析链接时会将 ../ 解析为上一级目录,从而导致实际跳转的 URL 与预期不符。
复现和新问题
基于这个发现,我尝试在评论区复现这个现象。输入:
https://www.bilibili.com/video/BV1/../BV2
发现 B 站把前后两个 BV 号分别解析了,而 ../ 没有被当成一个整体被处理。这不是我想要的。
一点绕过
自然而然的,我们想到了 URL 编码绕过。不明文表示 ../,而是使用对应编码来替换,即 %2E%2E/,用来绕过相关的正则检查,并且也能被浏览器正确解析。
输入 https://www.bilibili.com/video/BV1/%2E%2E/BV2 能复现出相同的效果。
以上。