WEB前後端漏洞分析與防禦技巧–第二部分
第五章 傳輸安全
HTTP傳輸竊聽
HTTP竊聽
- 竊聽用戶密碼
- 竊聽傳輸敏感信息
- 非法獲取個人資料
HTTP篡改
- 插入廣告
- 重定向網站
- 無法防禦的XSS和CSRF攻擊
HTTPS
中間人攻擊
如何確定服務器身份
第六章 密碼安全
密碼的作用:證明你是你
密碼-比對:存儲的密碼比對輸入的密碼
密碼-泄露渠道:
- 數據庫被偷
- 服務器被入侵
- 通訊被竊聽
- 內部人員泄露數據
- 其他網站(撞庫)
密碼-存儲
- 嚴禁密碼的明文存儲(防泄漏)
- 單向變換(防泄漏)
- 變換複雜度要求(防猜解)
- 密碼複雜度要求(防猜解)
- 加鹽(防猜解)
密碼-哈希算法
- 原文-密文一一對應
- 雪崩效應(原文變動特別小,密文完全不同)
- 密文-原文,無法反推
- 密文固定長度
- 常見哈希算法:md5,sha1,sha256
密碼-MD5單向變換
由於存在哈希算法對應的彩虹表,所以MD5單向變換並不安全。應該採用如下方式進行密碼哈希變換。
md5(明文) = 密文
md5(md5(明文)) = 密文
md5(sha1(明文)) = 密文
md5(sha256(sha1(明文))) = 密文
單向變換彩虹表
密碼(加鹽和多次哈希)
對於每個用戶生成的隨機鹽值也應該存儲到DB中去,以便用戶登錄的時候使用
計算鹽值和加密密碼的方式
密碼-幫助用戶加強複雜度
密碼-變換次數越多越安全
- 加密成本幾乎不變(生成密碼時速度慢一些)
- 彩虹表失效(數量太大,無法建立通用性)
- 解密成本增大N倍
密碼-密碼傳輸的安全性
- https傳輸
- 頻率限制
- 前端加密意義有限
第七章 接入層注入問題
SQL注入
原理:原本預期是數據的用戶輸入混到了sql的邏輯裏面,改變了sql原本的含義。
例1:
例2:
SQL注入危害
- 猜解密碼
- 獲取數據
- 刪庫刪表
- 拖庫
SQL注入防禦
- 關閉錯誤輸出
- 檢查數據類型
- 對數據進行轉義
- 使用參數化查詢(最根本的方法)
- 使用ORM(對象關係映射)
NoSQL注入和防禦
- 檢查數據類型
- 類型轉換
- 寫完整的條件
第八章 接入層上傳問題
存在漏洞的原因:
- 上傳文件
- 再次訪問上傳的文件
- 上傳的文件被當成程序解析
上傳漏洞防禦
- 限制上傳的後綴(不可靠)
- 文件類型的檢查(不可靠)
- 文件內容檢查(通過文件的頭幾個字節去判斷,也不能100%可靠)
- 程序輸出(會存在性能損耗,程序先讀一遍到內存中,然後傳給用戶)
- 權限控制-可寫可執行互斥 (基本原則,應儘量滿足)
第九章 社會工程學和信息泄露
信息泄露
- 泄露系統敏感信息
- 泄露用戶敏感信息
- 泄露用戶密碼
信息泄露的途徑
- 錯誤信息失控
- SQL注入
- 水平權限控制不當
- XSS/CSRF
- ……
社會工程學
- 你的身份由於掌握的資料確認
- 別人掌握了你的資料
- 別人僞裝成你的身份
- 別人利用你的身份幹壞事
OAUTH思想
- 一切行爲由用戶授權
- 授權行爲不泄露敏感信息
- 授權會過期
利用OAUTH思想防止資料泄露
第十章 其他安全問題
- 拒絕服務DOS
- 重放攻擊
拒絕服務攻擊DOS
- 模擬正常用戶
- 大量佔用服務器資源
- 無法服務正常用戶
常用攻擊方式
- TCP半連接
- HTTP連接
- DNS
分佈式拒絕服務攻擊DDOS
- 流量可以達到幾十到上百G
- 分佈式(肉機,代理)
- 極難防禦
DOS攻擊防禦
- 防火牆
- 交換機,路由器
- 流量清洗
- 高防IP(大量流量清洗服務,高帶寬)
DOS攻擊預防
- 避免重邏輯業務
- 快速失敗快速返回
- 防雪崩機制
- 有損服務
- CDN
重放攻擊
- 請求被竊聽或記錄
- 再次發相同的請求
- 產生意外的後果
重放攻擊的後果
- 用戶被多次消費
- 用戶登錄態被盜取
- ……
重放攻擊的防禦
- 加密(https)
- 時間戳
- token(session)
- nonce
- 簽名