<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近碰到一個神奇的網站,在瀏覽器可以開啟,但是通過 curl 或者 程式碼存取就直接 403,我估摸著這肯定是做了UA校驗
,於是請求的時候把瀏覽器的 UA 給帶上,然後存取發現還是 403,不過這也難不倒我,肯定是還有校驗其它的請求頭,直接瀏覽器開啟 network,把所有的請求頭複製過來並且帶上,確保我和瀏覽器在 http 協定層面的請求完全一樣,這樣不可能會失敗了吧,然而執行完發現還是 403。
放個地址: https://pixabay.com
伺服器端校驗使用者端沒有什麼黑魔法,因為都是通過 TCP 協定通訊,不可能存在瀏覽器傳送一個 HTTP 報文和我傳送一個同樣的 HTTP 報文伺服器能識別出來,既然不是校驗的 HTTP 層,那隻可能是在 TLS 層校驗的,於是祭出wireshark
抓包,看看能不能找到 TLS 握手中差異化的東西,眾所周知在 TLS 握手時有一個使用者端傳送給伺服器端的Client Hello
報文,很有可能就是根據它來辨別瀏覽器和非瀏覽器請求的,因為在這個報文中,使用者端要告訴伺服器端支援的加密套件,TLS 版本等等資訊,而這些資訊根據使用者端的實現都會有所差異,先抓個正常瀏覽器請求的報文看看,如下圖:
然後再通過 curl 存取抓包,如下圖;
可以看到兩邊的報文確實存在很大的差異,逐一對比排查之後發現很有可能是因為 curl 的請求報文裡缺少supported_versions
擴充套件資訊導致的 403,瀏覽器那邊在此擴充套件資訊內容如圖:
表示支援TLSv1.2
和TLSv1.3
,而且最終握手之後的協定也是切換到了TLSv1.3
,在上面兩個對比圖可以看到,瀏覽器走的是TLSv1.3
,而 curl 走的是TLSv1.2
,可能是一定要使用TLSv1.3
才能存取成功。
馬上 google 了下如何指定 curl 的 TLS 版本,發現只需要加上--tlsv1.3
引數就可以了,如下:
$ curl -I --tlsv1.3 'https://pixabay.com/' > -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' > -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49' HTTP/2 200 date: Fri, 22 Jul 2022 02:40:35 GMT content-type: text/html; charset=utf-8 cf-ray: 72e8cffc18c73d5a-HKG cache-control: s-maxage=86400 content-language: en vary: Accept-Encoding, Cookie, Accept-Language cf-cache-status: MISS content-security-policy: frame-ancestors none expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" referrer-policy: strict-origin-when-cross-origin x-frame-options: DENY set-cookie: __cf_bm=Cy4a751rDND6kHhu.RzEr5DpqnaxRdpUxaMfNfkya0A-1658457635-0-AS1DaewDqNjWHZ/m74A88bNyEG0EFsZAwmsm/ON5QQEuh8B6XOS7PkSnhGgXPLV+LtEvzOKTy/WWHmwY63uGlD0=; path=/; expires=Fri, 22-Jul-22 03:10:35 GMT; domain=.pixabay.com; HttpOnly; Secure; SameSite=None server: cloudflare alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
經過反覆驗證,發現除了要指定tlsv1.3
之外,還需要加上accept-language
和user-agent
頭,並且一定得是 http2 協定,三個條件缺一不可。
上面說到了一定要走 http2 協定,而現在市面上流行的 http client 基本都是隻支援 http1.1,所以只能直接從基礎庫入手了,官方有一個http2
的庫,一番調教之後也是成功請求了,程式碼如下:
const http2 = require("http2"); function get(host, path) { return new Promise((resolve, reject) => { const session = http2.connect(`https://${host}`, { minVersion: "TLSv1.3", maxVersion: "TLSv1.3", }); session.on("error", (err) => { reject(err); }); const req = session.request({ [http2.constants.HTTP2_HEADER_AUTHORITY]: host, [http2.constants.HTTP2_HEADER_METHOD]: http2.constants.HTTP2_METHOD_GET, [http2.constants.HTTP2_HEADER_PATH]: path, "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50", }); req.setEncoding("utf8"); let data = ""; req.on("data", (chunk) => { data += chunk; }); req.on("end", () => { session.close(); if (data) { try { resolve(data); } catch (e) { reject(e); } } }); req.on("error", (err) => { reject(err); }); req.end(); }); } (async function () { const data = await get("pixabay.com", "/"); console.log(data); })();
雖然已經成功請求了,但是本著探索的精神繼續深入發現 cloudflare 官方有一篇部落格就是專門介紹這個 TLS 攔截技術的,連結如下:
https://blog.cloudflare.com/monsters-in-the-middleboxes/
其中有一段內容也證明了我的猜想,翻譯後如下:
也就是說 cloudflare 會維護一組瀏覽器的 TLS 指紋,當收到一個 Client Hello 請求時,會檢查這組指紋,如果匹配不上,就會攔截這個請求,這樣可以攔截掉大部分不是來自瀏覽器的請求了。
以上就是突破神奇的Cloudflare防火牆的網路安全學習的詳細內容,更多關於Cloudflare防火牆的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45