我認為想要真正認識 JavaScript 的話,要從歷史開始。為什麼?因為從它的歷史,可以知道為什麼某些部分是這樣子設計,為什麼會有這些看似奇怪的行為。雖然有些古早的知識可能沒什麼實際用途,但對我來說是很有趣的。

學習它的歷史,並不是死背它出現的年代或是當初花了幾天開發設計,而是要去理解它出現的脈絡,去理解為什麼需要它,又為什麼它是這樣子被設計的。

想了解 JavaScript 的歷史,我最推薦的是這個資源:JavaScript: The First 20 Years,因為 JavaScript 之父 Brendan Eich 也是作者之一,想看中譯版的話在這邊:JavaScript 二十年

這本書紀錄了從 1995 年到 2015 年,一共二十年的 JavaScript 歷史,如果有時間的話我強烈建議你把它全部看完,會對 JavaScript 有不同的體會(還會知道很多冷知識)。

底下我會挑一些我覺得比較重要的東西來寫,資料來源沒有特別講的話,都是來自於上面提到的那本書,所以若是覺得似曾相似是正常的。

由於我跟 JavaScript 差不多時候出生,因此這些早期的歷史我並沒有親身體會過,若是寫得好像我有親身參與的話,全都是想像而已。

閱讀更多

重設密碼是幾乎所有網站都有的機制,最常見的是透過 email 寄送一個重設密碼的連結,點進去連結以後就可以幫這個帳號設定新的密碼。這個機制雖然常見,卻有一些關於安全性的小細節要注意。

這次要來寫的,是我在今年六月底的時候回報的由重設密碼功能引起的帳號奪取(account takeover)漏洞。

閱讀更多

2021 年末資安界最大的新聞莫過於 Log4j 的漏洞,編號為 CVE-2021-44228,又被稱為 Log4Shell,甚至被一些人形容為「核彈級漏洞」,可見這個漏洞的影響程度之深遠。

關於技術上的分析已經有很多篇文章在講解了,但對於不懂技術的人來說,可能只知道這個漏洞很嚴重,卻不知道為什麼嚴重,也不知道原理到底是什麼,因此我想從讓非技術背景的人也能理解的角度出發,寫一篇比較白話的文章。

閱讀更多

CREST 這個組織與 CPSA 這張證照在網路上可以找到的中文資料極少,在台灣算是比較冷門的一張證照,我是看了這篇:ECSA v10 等效申請CREST CPSA 資安分析師證照教學 / ECSA with CPSA Equivalency Recognition Step 才對這個組織以及這張證照有基本的理解。

我在十二月跟另外一個同事去考了這張證照,都有順利考到,趁著剛考完沒多久,趕快來寫篇心得記錄一下。

閱讀更多

前言

之前已經介紹過 Intigriti 的 XSS 挑戰很多次了,這次就不再介紹了,有興趣的可以直接翻我之前的文章。這一篇文章的重點會放在他們十月份的挑戰,難度不高,我花了大約一兩天的時間解出來以後就放著沒動,會想寫這篇是因為挑戰結束以後,看到許多超乎我想像的解法,因此特地寫一篇文章記錄一下。

閱讀更多

此文章是我在 Modern Web 2021 的分享:《接觸資安才發現前端的水真深》的文字版,當時的演講影片尚未釋出,想看簡報的話在這邊:slides

我自己覺得影片加上簡報的效果應該會比文字好,但想說用文字留一份紀錄也不錯,因此還是寫了這篇文章,內容會有些許與影片不同,有點像是再重新寫了一遍。

閱讀更多

我以前有寫過一些關於 XSS 的文章,主要在談的是實作面的防範以及防禦的各個細節:

  1. 防止 XSS 可能比想像中困難
  2. 淺談 XSS 攻擊與防禦的各個環節

這篇原本想寫的是 XSS 的基礎,就大家都聽過的那三種類別:Stored(Persistent)、Reflected(Non-Persistent) 以及 DOM-based XSS,但當我正要開始寫的時候,腦中突然浮現了幾個問題:「XSS 是什麼時候出現的?這三種類別又是什麼時候開始被分類的?」

因此,我花了點時間找了一些資料,這篇文章會跟大家談談 XSS 的歷史,讓我們一起更了解 XSS 的前世今生。

閱讀更多

前言

身為一個前端工程師,或是一個會寫 JavaScript 的人,你一定多少有聽過 prototype 這個名詞,甚至面試的時候也會考到相關的題目。

但你可能沒聽過的是,在 JavaScript 中有一種攻擊手法跟原型鏈息息相關,利用原型鏈這個功能的特性來進行攻擊——Prototype pollution,通常翻做原型鏈污染,就是這麼有趣而且破壞力十足的一個攻擊手法。

閱讀更多

前言

在許多網站中都有個很常見的功能,就是重新導向。

舉例來說,如果要觀看的頁面需要權限但是使用者還沒登入,就會先把使用者導去登入頁面,登入完之後再導回原本要去的頁面。

例如說今天有個社群網站,想要看個人檔案的話需要登入,而小明的個人檔案網址是:https://example.com/profile/ming,那我身為一個訪客,點進去之後就會跳轉到登入頁面,並且帶上我原本要去的網址當作參數:
https://example.com/login?redirect=https://example.com/profile/ming

登入成功之後,網站就會根據 redirect 的值,把我導去原本要前往的頁面。

雖然看起來是個小功能,但其實背後有不少安全性的問題要考慮。

閱讀更多