簡評:開發(fā)安全可靠的 Web 應用程序非常困難脆荷,非常困難蚌成。
作者有 14 年開發(fā)安全 Web 應用程序的經(jīng)驗芭析,這個列表包含了作者在這段時間內(nèi)學到的一些重要問題截珍, 希望每個人在創(chuàng)建 Web 應用程序時都能夠認真考慮一下攀甚。
Database
- 加密識別用戶或敏感信息的數(shù)據(jù)(如訪問令牌 token,電子郵件地址或計費詳細信息)岗喉。(這將限制精確匹配查找)
- 如果您的數(shù)據(jù)庫支持低成本的空閑時加密(如AWS Aurora)秋度,則可以使其保護磁盤上的數(shù)據(jù)。確保所有備份都被加密存儲钱床。
- 對數(shù)據(jù)庫訪問用戶帳戶使用最小權限荚斯,不要使用數(shù)據(jù)庫 root 帳戶,并檢查未使用的帳戶和密碼不正確的帳戶查牌。
- 使用為此目的設計的 key store 來存儲和分發(fā) secret事期,不要硬編碼。
- 通過使用 SQL 預處理語句完全防止 SQL 注入纸颜,例如:如果使用 NPM兽泣,不要使用 npm-mysql,請使用支持預處理語句的 npm-mysql2胁孙。
**Authentication **
- 確保使用適當?shù)募用芩惴ǎㄈ?bcrypt)對所有的密碼進行摘要處理唠倦,不要自己實現(xiàn)加密模塊,并用正確的隨機數(shù)據(jù)正確地初始化加密模塊涮较。
- 使用最佳實踐和經(jīng)過驗證的組件進行登錄稠鼻、忘記密碼和密碼重置,不要自己去實現(xiàn)法希。
- 實現(xiàn)簡單但足夠的密碼規(guī)則枷餐,鼓勵用戶使用長且隨機的密碼。
- 為您的所有服務使用多步身份驗證(一般都是兩步驗證)苫亦。
Denial of Service Protection
- 確保 DOS 攻擊 API 不會影響到網(wǎng)站毛肋,至少在較慢的 API 路徑和身份驗證相關的 API(如登錄和令牌生成例程)上設置限速,考慮在前端 API 上使用驗證碼的來保護后端服務免受DOS 攻擊屋剑。
- 對用戶提交的數(shù)據(jù)和請求的大小和結(jié)構執(zhí)行健全限制润匙。
- 考慮使用全球緩存代理服務(如 CloudFlare)緩解 DDOS。
**Web Traffic **
- 對整個網(wǎng)站使用 TLS唉匾,而不僅僅是登錄表單和響應孕讳。過渡性地匠楚,使用 strict-transport-security 請求頭來強制所有請求使用 HTTPS。
- Cookie 必須是 httpOnly 和安全的厂财,并且由路徑和域限定芋簿。
- 使用無 ubsafe-* 后門的 CSP ,配置起來很痛苦璃饱,但值得与斤。使用 CSP 的 Subresource Integrity 作為 CDN 內(nèi)容。
- 在客戶端響應中使用 X-Frame-Option荚恶,X-XSS-Protection 頭撩穿。
- 使用 HSTS 響應強制僅允許 TLS 訪問,將所有 HTTP 請求重定向到服務器上的 HTTPS 作為替代谒撼。
- 使用所有形式的 CSRF 令牌食寡,并使用新的 SameSite Cookie 響應頭。
APIs
- 確保您的公共 API 中無法枚舉資源廓潜。
- 確保在使用您的 API 時抵皱,用戶已經(jīng)被完全驗證和授權。
Validation and Encoding
- 在客戶端進行輸入驗證以快速獲得用戶有效輸入辩蛋,但不要相信它叨叙,在顯示之前始終對用戶輸入進行驗證和轉(zhuǎn)碼。
- 使用服務器上的白名單驗證每個用戶輸入的最后一個 bit堪澎,不要直接將用戶內(nèi)容注入到響應中,切勿在 SQL 語句或其他服務器端邏輯中使用不受信任的用戶輸入味滞。
原文地址:Web Developer Security Checklist
擴展閱讀:
Web 程序員進階之路