Web 安全開發注意事項
一、背景
最近開發公司的WEB專案,商密技術研究部領導推出了一套測試規範,規範中包括web端安全測試掃描,掃描結果不盡如人意,因此蒐集及整理如下web安全開發事項。
二、編碼安全策略
簡述:不要相信任何來自客戶端提交的資料,比如URL和引數,HTTP頭部、javascript或者其他嵌入程式碼提交的資料。對客戶端提交的資料需要經過過濾或者轉義,然後再進行處理。
1、客戶端提交資料驗證
a、合法性校驗
不可信資料的合法性校驗包括:資料型別校驗如字元。數字、日期等特徵;資料範圍;資料長度等。
b、防範sql注入
不可信資料進入後端資料庫操作前,使用正確的引數化查詢來處理,避免出現SQL注入。
c、檔案校驗
不可信資料為解壓縮的檔案時,如果檔案位於服務目錄外或檔案大小超過限制,應拒絕處理。
d、訪問控制
不可信資料通過校驗後,還應確認所提交的內容是否與使用者的身份匹配,避免越權訪問。
2、防止XSS跨站
a、輸入校驗
對輸入的資料進行過濾和轉義,包含但不限於<>"9%0&+V"等危險特殊字元。
b、輸出編碼
輸入資料輸出到不同場景中進行不同形式的編碼,如輸出到HTML標籤中則進行HTML編碼輸出到URL中則進行URL編碼,輸出到JS中則行 Script編碼,輸出到 Stylet中則進行CSS編碼。
3、防止CSRF跨站偽造
a、Token使用
在重要操作的表單中增加會話生成的 Token欄位,提交後在服務端校驗該欄位。
b、增加二次驗證
在關鍵表單提交時,要求使用者進行二次身份驗證如密碼、圖片驗證碼、簡訊驗證碼等。
c、Referer驗證
檢驗使用者請求中 Referer:欄位是否存在跨域提交的情況。
4、會話安全
a、防止會話劫持
在應用程式進行身份驗證時,建議持續使用HTTPS連線,認證站點使用HTTPS協議。如果連線是從防止會話劫持HTTP跳轉到HTTPS,需要重新生成會話識別符號。禁止在HTTP和HTTPS之間來回轉換,這可能會導致會話被劫持。
b、會話識別符號安全
設定會話 Cookie時,正確設定" Httponly'屬性(禁止程式加5指令碼等讀取 Cookie資訊)" Secure'屬性(禁Cookie安全設定止Cookie通過HTTP連線傳遞到伺服器端進行驗證);" Domain"屬性(跨域訪問時可指定的授權訪問域名),"Path"屬性(授權可訪問的目錄路徑)。
c、Cookie安全設定
會話識別符號應放置在HTP或HTPS協議的頭資訊保安中,禁止以GET引數進行傳遞、在錯誤資訊和日誌中記錄會話識別符號。
d、會話有效期
會話應在平衡風險和功能需求的基礎上設定有效期。定期生成一個新的會話識別符號並使上一個會話會話有效期識別符號失效,這可以緩解那些因原會活識別符號被盜而產生的會話劫持風險。
e、會話登出
登出功能應用於所有受身份驗證保護的網頁,使用者會話登出登出後應立即清理會話相關資訊,終止相關的會話連線。
5、資料安全
a、敏感資訊傳輸
敏感資訊傳輸時,禁止在GET請求引數中包含敏感資訊,如使用者名稱、密碼、卡號等。建議為所有敏感資訊採用TSL加密傳輸。
b、客戶端儲存
客戶端儲存敏感資訊時,禁止其表單中的自動填充功能、以明文形式儲存敏感資訊
c、服務端儲存
服務端儲存敏感資訊時,禁止在程式中硬編碼敏感資訊,明文儲存使用者密碼、身份證號、銀行卡號、持卡人姓名等敏感資訊,臨時寫入記憶體或檔案中的敏感資料,應及時清除和釋放
6、日誌規範
a、日誌記錄
確保日誌記錄包含了重要的應用事件,但禁止儲存敏感資訊,如會話標識,賬戶密碼、證件等。
b、日誌保護
日誌受到嚴格保護,避免未授權的讀取或寫入訪問。
c、日誌記錄事件
記錄所有的身份驗證、訪問操作、資料變更、關鍵操作、管理功能、登出記錄等事件
7、異常處理
a、容錯機制
在應用實現時應包含完整的功能異常捕獲機制如try-catch塊,典型位置:檔案、網路、資料庫、命令操作等。一旦出現異常,應該在日誌中完整記錄異常的發生時間、程式碼位置、報錯詳情、觸發錯誤的可能使用者等,重要系統的嚴重異常應該有報警的機制,及時通知系統運營者及時排查並修復題。
b、隱藏使用者資訊
禁止在系統異常時洩露使用者的隱私資訊,典型的有:身份資訊、個人住址、電話號碼、銀行賬號、通訊記錄、定位資訊等。
c、異常狀態恢復
方法發生異常時要恢復到之前的物件狀態,如業務操作失敗時的回滾操作等,物件修改失敗時要恢復物件原來的狀態,維持物件狀態的一致性。
8、主機安全
a、資料訪問檢查
防止封裝好的資料物件被未授權使用,設定合理的據快取區大小以防止耗盡系統資源。
b、最小化開放埠
關閉作業系統不需要的埠和服務。
c、通訊安全
配置網站的HTTPS證書或其它加密傳輸措施。