資安心法:不要相信任何客戶端的驗證
2013-04-13 是我第一次對外公開分享這個心法,請見簡報的第 108 頁。
一、不能信任的不只 JavaScript
不能信任的不只 JavaScript,而是任何客戶端的程式,包括但不限於 ActiveX、Java、Flash、Silverlight。千萬別以為程式的混淆、編碼、加密有多大用處,那只能對付一般人,但對於真正的駭客一點用也沒有。
二、Nonce
ingramchen 在文中表示:『需要權限的操作都要在 server 做,並做好帳戶驗證,有重要的 transaction,要採用 Nonce 保護等等。』
其實 Nonce 要配合類似 SSL 的機制才完整,否則也只是輕薄的假象。另外,Nonce + SSL 防止的也僅止於「駭客」而無法防止「用戶本身」,也就是假如合法的用戶要亂搞還是可以亂搞。
舉例來說,假如後端有一個 API 提供遊戲計分上傳的功能,讓 JavaScript 或 App 可以上傳分數。這個合法用戶自然可以合法取得 Nonce,再加上 SSL 到用戶端時已解密,所以用戶想要的話,可以無限次無限制的亂搞這個 API。