473 字
2 分鐘
[Day2] 用Workers做反向代理並修改網頁內容— 30天實戰Cloudflare
2023-05-20
無標籤

當我們在Cloudflare DNS上設定一筆紀錄並開啟Proxy,這時候就做了反向代理,反向代理會解開SSL加密,就可以取得Request的Body、Header這時候就可以進行修改,再丟到原點伺服器上,同樣從原點伺服器會來的Response的Body、Header也可以在Cloudflare上修改。

除了在DNS上做反向代理,我們也可以在Workers上面做,而且還可以竄改內容回傳給使用者。


範例一、簡易反向代理#

我們以臺北市學生資訊網為範例,我們將這個網站綁到我們的網域上,並在上面進行一下變化。

以下面程式碼為例,可以做一個簡單的反向代理。我們本原本建立的request的host改成目標後,再做一次fetch取得原本網站內容。這時候就可以在自己的網域就可以看到以上網站。

export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
url.host = "tpenroll.tp.edu.tw";
return fetch(url, request);
},
};

範例二、竄改內容#

接下來我們就可以在網站上加料,比方說在首頁用JS加上一個alert通知的效果,並增加一點css,我們可以這樣改,參考以下程式:

export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
url.host = "tpenroll.tp.edu.tw";
if (url.pathname == "/") {
const resp = await fetch(url, request);
let text = await resp.text();
text += "<style>body { background-color: red }</style>";
text += "<script>alert('haha')</script>";
return new Response(text, resp);
} else {
return fetch(url, request);
}
},
};

接著我們就會看到下面生效了,會彈出一個haha的視窗,而且且背景被改成紅色,透過這樣方式,我們可以對網站進行任意串改。


結語#

Workers這時就體現他強大的工具,可以用來幫任何網站進行反向代理,也可以竄改網頁任何內容,是個非常強大的工具。