為了避免自己撰寫出具有安全風險的程式碼而仍不自知,就挑上這堂 從 OWASP Top 10 實現全方位防禦強化 課程。這邊筆記下不安全的反序列化風險與應對方式。
課程相關資訊
[連結]:https://hiskio.com/courses/1539/lectures/146882
本篇範圍:Chapter 2
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
內容
序列化便是將資料轉化成一串字,進而方便儲存;使用時,將其進行反序列化,就可以獲得原本字串
1. 物件注入攻擊 Object Injection Vulnerabilities
亦即在寫入物件時,直接將外部的值存入、覆寫…等,進而造成「可執行程式碼」或是獲取管理員權限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
const express = require('express'); const app = express(); app.use(express.json()); // 假設有一個設定物件 let settings = { theme: 'light', admin: false }; // 允許用戶更新設定的 API 路徑 app.post('/update-settings', (req, res) => { // 不安全地更新物件:直接將用戶傳入的資料合併到設定物件中 Object.assign(settings, req.body); res.json({ message: 'Settings updated!', settings: settings }); }); // 啟動伺服器 app.listen(3000, () => { console.log('Server is running on port 3000'); }); // 執行以下指令 curl -X POST http://localhost:3000/update-settings \ -H "Content-Type: application/json" \ -d '{"admin": true}' /* 最後結果 */ { theme: 'light', admin: true // 攻擊者修改了設定,獲取了管理員權限 } |
因此在程式寫法上,可更動成僅允許存取的 key 來跑迴圈,便可避免此狀況