以前當我想要部署一個簡單的服務時,我會去 Heroku 上面,因為簡單而且免費,雖然說還是有些使用限制,但整體而言還是很方便的,甚至還有一些簡單的 DB 可以用。如果是靜態網頁,會選擇 Netlify 或是 GitHub Pages,也都是簡單方便的選擇。

但 Heroku 從 2022 年年底之後就不再提供免費方案了,因此那時一堆人在尋找替代方案,包括 Render 或是 fly[dot]io 等等,都是很多人跳槽的新選擇。而我自己以前其實在 Heroku 上也有三四個專案,從 Heroku 改變方案之後就再也沒也動過了。

前陣子收到 Zeabur 創辦人的來信,希望有機會能跟我合作推廣這個平台,我自己試了之後發現體驗確實很不錯,因此就寫了這篇文章介紹一下。

閱讀更多

如果有看過我的部落格的話,應該會知道我一直都是寫 React,完全沒有碰過 Vue,也沒有碰過 Angular。自從 2015 年接觸到 React 後,工作上就一直是用 React 了。

然而,最近因為工作上的需求,所以開始寫 Vue 了,而剛好也有讀者來問我從 React 跳到 Vue 的心得,因此這邊就簡單寫一篇來分享。

閱讀更多

相比於去年前年,今年的 web 題難度有顯著降低了不少,變得更平易近人了,靠著隊友的努力拿下了第一名,而 web 題也只剩一題沒解出來。

這次我基本上只解了簡單的 funnylogin 跟難的 safestlist,其他都是隊友解開的,還有另一題 another-csp 有看了一下,因此這篇只會記我有看過的以及比較難的題目。

如果想看其他題,可以參考其他人的 writeup:

  1. st98 - DiceCTF 2024 Quals writeup
  2. 0xOne - 2024 Dice CTF Write up [Web]

官方提供的所有題目原始碼:https://github.com/dicegang/dicectf-quals-2024-challenges

關鍵字列表:

  1. crash chromium
  2. slower css style
  3. xsleak
  4. URL length limit
  5. service worker
  6. background fetch
  7. connection pool + css injection
  8. iframe width + css inection

閱讀更多

今年的 0CTF 一共有三道 web 題,其中一道題目是 client-side 的,我就只解這題而已,順利拿到 first blood,這篇簡單記錄一下心得。

關鍵字列表:

  1. CSS injection
  2. CSS exfiltration

閱讀更多

因為最近有點忙的關係,這兩三個月比較少打 CTF 了,但還是會在推特上看到一些有趣的題目。雖然沒時間打,但筆記還是要記的,沒記的話下次看到鐵定還是做不出來。

這篇主要記一些網頁前端相關的題目,由於自己可能沒有實際下去解題,所以內容都是參考別人的筆記之後再記錄一些心得。

關鍵字列表:

  1. copy paste XSS
  2. connection pool
  3. content type UTF16
  4. multipart/mixed
  5. Chrome DevTools Protocol
  6. new headless mode default download
  7. Scroll to Text Fragment (STTF)
  8. webVTT cue xsleak
  9. flask/werkzeug cookie parsing quirks

閱讀更多

你知道嗎,當你跟朋友在討論 SSR 的時候,很有可能你們對 SSR 的認知其實是不一樣的。直接舉個例子,底下這幾種情境,你覺得哪些算是 SSR?

  1. 由後端 PHP 產生畫面
  2. 前端是 React 寫成的 SPA,但後端如果偵測到搜尋引擎,就會切換另一種 template,輸出專門針對搜尋引擎的模板,而非 React 渲染出的頁面
  3. 前端是 React 寫成的 SPA,但透過 Prerender 先把頁面 render 成 HTML,再交給搜尋引擎(一般使用者依然是 SPA),跟上一個的差別是使用者跟搜尋引擎看到的畫面基本上一致
  4. 前端是 React 寫成的 SPA,在後端用 renderToString 把 React 渲染成字串,但是沒有資料,資料會在前端拿
  5. 前端是 React 寫成的 SPA,後端會針對每個 page 先呼叫 API 拿資料,拿完以後才呼叫 renderToString 輸出 HTML,在 client 端時會做 hydration 讓頁面可以互動

有一種人認為只要是由後端產生出畫面,就叫做 SSR,所以 1 ~ 5 全部都是 SSR。也有一種人認為前端必須先是 SPA,此時搭配的後端才能叫做 SSR,所以 2~5 都是 SSR;而另一種人則認為 SSR 的重點是 hydration,所以只有 5(或是 45)是 SSR。

閱讀更多

Sentry 在 2023 年 11 月 9 號時,在部落格上發布了這篇文章:Next.js SDK Security Advisory - CVE-2023-46729,內容主要在講述 CVE-2023-46729 這個漏洞的一些細節,包含漏洞成因、發現時間以及修補時間等等。

雖然說是在 11/9 正式對外發布漏洞公告,但漏洞其實在 10/31 發佈的 7.77.0 版本已經修復了,有預留一些時間給開發者們來修補漏洞。

接著就來簡單講一下這個漏洞的成因以及攻擊方式。

閱讀更多

這兩場比賽都有很多很有趣但也很難的題目,被電得很慘但也學到不少。

關鍵字列表:

  1. nim json, null byte
  2. nim request smuggling
  3. js-yaml
  4. web worker
  5. blob URL
  6. meta redirect
  7. file protocol & .localhost domain
  8. sxg: Signed Exchanges
  9. 431 CSP bypass
  10. DOM clobbering document.body
  11. ejs delimiter
  12. Node.js + Deno prototye pollution gadget
  13. XSleaks golang sort

閱讀更多

有些網站會用 GIF 來做一些圖檔,畢竟會動嘛,看起來就比一些靜態的圖片還要厲害,還要來得更吸引人。或其實不只是因為吸引人,而是有些需求本來就需要一個會動的圖,例如說貼圖,會動是很正常的。

但是 GIF 的缺點之一眾所皆知,就是檔案很大,真的很大。尤其是手機上因為解析度比較高,可能會需要用到三倍大小的圖片,就算只顯示 52 px,也要準備 156px 的圖檔,佔的空間就更多了。以網頁來說,當然是要載入的資源越少越好,越小也越好。

閱讀更多