安全編碼規范


一.上線前通用安全開發要求
1.使用“經測試和可信的平台/框架代碼”開發應用程序
2.應用系統應當保持對所依賴的框架、第三方組件的更新,以避免出現已知漏洞
3.應用程序就避免於頁面(HTML、JavaScript)中包含技術性注釋語句、功能說明或解釋等信息
4.應用系統上線前,應刪除相應的測試內容,包括但不限於:測試頁面、測試用例、測試代碼、控制台輸出等
5.應用系統部署后,應刪除默認部署頁面,禁止留存SVN/Git相關文件、備份文件等
6.如果應用軟件部署在客戶端,例如移動APP,應使用混淆、簽名、加固等措施防止逆向獲取源代碼

二.輸入驗證與輸出凈化(一切輸入都是有害的,應當對所有輸入的參數進行合法性、合理性校驗)
1.應用系統應對所有輸入的參數進行合法性、合理性驗證,拒絕接受驗證失敗的數據,包括但不限於驗證數據的類型、長度、格式、范圍和內容等。
    對於輸入數據范圍可確定的場景,合法性檢測建議使用“白名單”的方式(比如:日期、身份證號、銀行卡號、手機號、數字等可明確格式的數據,須在服務器端驗證格式是否正確)
    對於輸入數據范圍不確定的場景,合法性檢測可采用“黑名單”的方式(比如:在可自由輸入的文本框過濾或轉義SQL關鍵字、HTML標簽、XML標簽、單引號、雙引號、路徑字符、換行符、空字節等)根據實際情況設置黑白名單,避免影響業務正常使用。
2.應用系統應對所有輸出到客戶端、操作系統、web頁面等位置的數據進行編碼或過濾凈化,避免潛在危險字符,導致安全問題發生,包括但不限於:SQL注入漏洞、XSS漏洞、命令注入漏洞等。
    危險字符如\ ' " .. / \r \n < > ^ | ! ` * ( ) & ; - : %等,應當在服務器端進行安全過濾或轉義編碼。
    
三.身份驗證與權限控制
1.密碼輸入界面應采取安全保護措施,包括但不限於:不以明文形式顯示密碼、利用圖形驗證碼防止暴力破解等。
2.密碼的創建應當符合復雜度檢測要求
    包括但不限於以下要求:靜態密碼長度至少8位,至少應同時包含大小寫字母、數字和特殊字符這三類字符中的兩類,密碼不能與用戶名相同,避免密碼中包含公司特征密碼等。
3.所有的身份驗證過程應在可信任環境中執行,且在每次用戶登錄時進行身份驗證。避免 僅在客戶端而非服務器端執行身份驗證
4.服務端應對驗證嘗試的頻率進行限制,連續多次登錄失敗的,應當對其進行限制。
    限制同一IP地址能夠進行驗證嘗試的頻率和次數。在超過嘗試次數后,封禁IP地址一段時間,防止攻擊者持續進行暴力破解。
    限制同一賬號能夠進行驗證嘗試的頻率和次數。在超過嘗試次數后,鎖定賬戶一段時間,防止攻擊者持續進行暴力破解
5.在用戶執行關鍵或者不可逆的操作,如交易時、修改密碼之前,應再次驗證用戶身份,以減少不安全會話帶來的損失,防范跨站請求偽造攻擊。
6.遵循最小權限原則 進行權限管理的設計和實現,將許可權限盡可能地細化,建議使用細粒度權限管理訪問控制。
7.隸屬於用戶個人的頁面或者功能必須進行權限控制校驗
    防止水平越權漏洞(同級、跨級用戶之間的越權),避免任意訪問、修改、刪除他人的數據,比如查看他人的私信內容、修改他人的訂單。
8.確保只有授權的用戶才能訪問秘密數據或敏感數據
    這類數據包括:與用戶信息或應用軟件自身安全密切相關的狀態信息、文件或其他資源、受保護的URL、受保護的功能、直接對象引用、應用程序數據以及與安全相關的配置信息等。應避免未授權訪問。

四.文件及資源管理
1.在上傳文件前應對用戶身份進行驗證,並對上傳文件進行驗證和控制
包括但不限於:
    應對上傳文件的文件類型擴展名進行驗證,還應通過檢查文件報名頭信息的方式,驗證上傳文件是否是滿足業務需要的文件類型,避免攻擊者上傳惡意文件。
    應對上傳文件進行重命名,如果文件名中有路徑符號,會在文件存儲時造成文件穿越
    文件上傳后不應向用戶返回文件保存的絕對路徑,避免泄露服務器信息
    上傳的文件不能帶有執行權限,如果有,需要取消掉文件的執行權限
2.在下載文件前應對用戶身份進行驗證,並對下載文件進行驗證和控制
包括但不限於:
    驗證文件的真實路徑是否在允許下載范圍內。
    驗證下載文件名是否含有../和..\防止路徑遍歷導致的任意文件下載
3.應正確釋放資源,及時釋放系統資源,禁止再次釋放已釋放的資源,確保釋放資源前完全清除敏感信息。
4.發生異常時,應及時回收並釋放系統資源

五.會話管理與通信安全
1.會話標識應當采用隨機且唯一的不可預測的散列值,具備足夠強度(比如128位),使用服務器或者框架的會話管理控制,確保會話標識符的隨機性,避免暴力散列攻擊
2.用戶登錄成功后,服務器應更新會話標識符,或者增加IP等其他判斷標志,並周期地使舊會話標識符失效。
    這可以緩解那些原標識符被獲得的特定會話動持情況。
3.不應在URL、錯誤信息或日志中暴露會話標識符。
    敏感操作應當采用POST請求
    不要將會話標識符以GET參數進行傳遞,會記錄在服務器訪問日志中
4.應設置會話令牌有效期,建議公網系統會話有效時間不超過30分鍾
5.用戶注銷時應當立即清理當前用戶會話
6.在通信過程中,對敏感信息應進行加密並使用加密通道傳輸。使用安全的協議,禁止使用SSL V2和V3,建議使用TLS V1.2
    為所有要求身份驗證的訪問內容和所有其他的敏感信息提供TLS連接

六.異常處理與日志審計
1.精確捕獲異常,並對捕獲的異常進行恰當的處理,避免在捕獲異常后不做任何處理
2.當奶瓶vtg時,不要將系統產生的異常信息直接反饋給用戶
包括但不限於:系統的詳細信息、會話標識、賬號信息、調試或堆棧跟蹤信息、源代碼片段等。
3.應創建默認的錯誤頁面,使用通用的錯誤消息提示,防止攻擊者從出錯頁面中得到一些敏感的系統信息。
4.不要在日志中保存敏感信息。對日志記錄的內容進行審核,防止將關鍵級敏感信息寫入日志
    日志記錄中不得以任何形式保存密碼、密鑰等高敏感性數據,其他敏感信息僅應在脫敏或加密的前提下保存。
5.使用信息摘要算法以驗證日志記錄的完整性。
6.對日志中的特殊元素進行過濾和驗證。確保日志記錄中的不可信數據,不會在查看界面或者運行軟件時以代碼的形式被執行
    \r \n等換行符的錄入,可能會造成日志內容換行,從面篡改日志內容。
    如果日志中存在惡意代碼,在頁面讀取展示時,可能會造成惡意代碼執行,如XSS攻擊、一句話木馬等

七.敏感數據加密與保護
1.保護重要秘密信息免受未授權訪問。
    明確應用系統中的敏感數據、隱私數據的范圍,以及有權訪問這些數據的用戶范圍。
    對數據的授權訪問遵循最小權限原則
2.用戶敏感信息,在頁面顯示和傳輸過程中應注意脫敏和加密,數據庫中也應當進行加密存儲,避免數據庫端信息泄露。
3.用於訪問系統資源的系統用戶、密碼、密鑰必須加密保存在配置文件中,同時要求配置參數要統一集中管理,避免同一個參數在多個配置文件中保存。
4.代碼中不應當出現硬編碼的敏感信息,如用戶名、密碼、IP地址、公司郵箱等。
5.數據庫中存儲的用戶密碼等鑒別信息,應使用不可逆的加密算法(國密SM3、SHA-512),並進行加鹽Salted處理,然后將鹽和密碼哈希值一起保存在數據庫中,或通過加密機完成加密。
    推薦如下加密算法:
    非對稱加密算法:SM2、RSA
    對稱加密算法:SM4、3DES、AES
    散列算法:SM3、SHA256
6.使用安全的隨機數生成器,避免將具有密碼學弱點的偽隨機數生成器用於加密場景

八.業務安全
1.在使用平台資源,譬如短信、郵件、電話、下單、支付,必須實現正確的防重機制,如數量限制、接口請求頻率限制、驗證碼人機校驗,避免被濫刷而導致的資損
    如注冊時發送驗證碼到手機,如果沒有限制次數和頻率,那么可以利用此功能騷擾到其他用戶,並造成短信平台門資源浪費
2.在調用接口時,應該采取API簽名機制,防止數據在傳輸過程中被篡改。如支付訂單等重要且敏感的數據,應當采取數字簽名等方式,保證數據完整性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM