分類
常見漏洞和對策
注射攻擊
SQL:
輸入特定的字符串以執行其他設計時
腳步:
-提供測試輸入,以查看是否可訪問和可操作
-實驗,使用錯誤消息->獲取信息
-具有目標的SQL注入
-當抑制SQL錯誤時,使用結構化攻擊形式(盲)
設計SQL訪問權限而不允許用戶操縱SQL語句
-使用存儲過程
-使用參數化查詢
-驗證輸入
意識,測試和驗證方法
操作系統:
當程序執行由OS處理的功能時,使用用戶的輸入作為參數
整數溢位:
語言特定的解決方案
轉向異常處理
使用邊界值進行測試以在測試過程中強制內部錯誤
目錄遍歷:
例如,使用../向上訪問存儲在Web根目錄之外的文件和目錄
- 不使用用戶輸入來存取本地資源
- 將用戶輸入匹配到特定資源,然後將路徑寫死(Hard Code)
跨站點腳本攻擊(XSS)
用戶輸入包括腳本(Script)但沒有緩解
- 非永久性:立即執行並通過Web服務器傳回結果
- 持久性:存儲在Web服務器或什至後端存儲上
將做開發人員設計的任何事情
- 竊取身份驗證信息
- 會話劫持(Session hijacking)
- 部署敵對內容
- 更改設置
- 冒充用戶
- 釣魚或竊取敏感信息
解決方案:
使用Anti-XSS lib從輸入中隔離腳本
限制上傳類型
屏幕上傳尺寸
測試中
跨站點偽造請求(CSRF)
行為:
- 先前認證中已認證的用戶
- 通過欺騙經過身份驗證的用戶的瀏覽器,向目標站點發送HTTP請求
解決方案:
限制認證時間
Cookie到期
管理網頁標題等特定元素並進行檢查
使用隨機CSRF令牌(Token)
加密失敗
憑證寫死(Hard Code)
缺少敏感數據的加密
使用損壞/風險/自己創建的演算法
使用沒有完整性檢查的程式碼
使用沒有加鹽(Salted)的單向雜湊
彩虹表:
密碼的所有可能組合,最多14個字符,可以查詢哈希值
鹽值(Salt)連接到密碼:
- 增加密碼長度
- 不同帳戶之間的相同密碼不再產生相同的雜湊值
輸入驗證失敗
輸入驗證失敗
緩衝區溢出
不受信任的輸入依賴
跨站點腳本編寫和跨站點請求偽造
目錄遍歷
緩衝區大小計算錯誤
輸出驗證
緩衝區溢出
用於保存輸入的輸入緩衝區被大於緩衝區大小的資料覆蓋
- 不良的編程習慣
- 語言弱點
SOLID 編碼原則
驗證所有輸入
規範化錯誤
應用程序將字符串處理為基本形式
問題行為:
規範化之前的有效性檢查,一切看起來不錯
- 按應用規範化
- 字符串的基本形式是敵對的
防衛功能缺失
在以下位置缺少或不正確:
身份驗證和身份驗證嘗試計數
授權,權限,不必要的權限
上傳文件大小/類型
URL重定向
不信任的網站
不受控制的格式字符串