6.1 數據清洗
6.1.1 輸入驗證
6.1.1.1 關鍵狀態數據外部可控
審計指標:應避免關鍵狀態數據被外部控制。
審計人員應檢查代碼中是否將與用戶信息或軟件自身安全密切相關的狀態信息,存儲在非授權實體都可以訪問的地方,如結果為肯定,則系統可能有關鍵狀態數據能被外部訪問或篡改的安全風險。不規范代碼示例參見B.2.1。
6.1.1.2 數據真實性驗證
審計指標:宜驗證數據真實性,避免接收無效數據。
審計人員宜檢查代碼是否對數據的真實性進行驗證,包括但不限于:
a) 宜檢查是否有數據源或通信源驗證;
b) 宜檢查是否存在未驗證或不正確驗證數據的數字簽名;
c) 宜檢查是否缺失或進行不恰當完整性檢查;
d) 宜檢查安全相關的輸入是否僅依賴于加密技術而未進行完整性檢查;
e) 宜檢查是否驗證文件內容而非文件名或擴展名;
f) 宜檢查是否驗證未經校驗和完整性檢查的Cookie。不規范代碼示例參見B.2.2。
如上檢查項的任一結果為肯定,則提示存在安全風險。
6.1.1.3 繞過數據凈化和驗證
審計指標:宜防止以大小寫混合的方式繞過數據凈化和驗證。
審計人員宜檢查字符串在查找、替換、比較等操作時,是否存在因大小寫問題而被繞過的情況。不規范代碼示例參見B.2.3。
6.1.1.4 在字符串驗證前未進行過濾
審計指標:不宜在過濾字符串之前對字符串進行驗證。
審計人員宜檢查對字符串進行驗證之前是否存在對該字符串進行過濾,來防止注入類攻擊的發生。
6.1.1.5 對HTTP頭Web腳本特殊元素處理
審計指標:應對HTTP頭的Web腳本語法中的特殊元素進行過濾和驗證。
審計人員應檢查代碼是否對HTTP頭中的Web腳本特殊元素進行過濾處理。因HTTP頭中的Web腳本含有特殊元素, 可能會導致瀏覽器執行惡意腳本。不規范代碼示例參見B.2.4。
6.1.1.6 命令行注入
審計指標:應正確處理命令中的特殊元素。
審計人員應檢查代碼對利用外部輸人來構造命令或部分命令時,是否對其中的特殊元素進行了處理,命令注人通常發生在以下但不僅限于:
a) 數據從非可信源進人到應用程序中;
b) 數據是字符串的一部分,該字符串被應用系統當作命令來執行的;
c) 通過執行這個命令,應用程序為攻擊者提供了攻擊者不應擁有的權限或能力。
6.1.1.7 數據結構控制域安全
審計指標:宜避免對數據結構控制域的刪除或意外增加。
審計人員檢查代碼關于數據結構控制域的操作:
a) 宜檢查代碼是否存在對數據結構控制域的刪除而導致系統安全風險。不規范代碼示例參見B.2.5。
b) 宜檢查代碼是否存在對數據結構控制域的意外增加而導致系統安全風險。不規范代碼示例參見B.2.6。
6.1.1.8 忽略字符串結尾符
審計指標:應保證字符串的存儲具有足夠的空間容納字符數據和結尾符。
審計人員應檢查代碼字符串的存儲空間是否能容納下結尾符,字符串不以結尾符結束會造成字符串越界訪問。規范/不規范代碼示例參見B.2.7。
6.1.1.9 對環境變量長度做出假設
審計指標:不應對環境變量的長度做出假設。
審計人員應檢查代碼在使用環境變量時是否對環境變量的長度做出特定值的假設,因環境變量可由用戶進行設置修改,故對環境變量的長度做出假設可能會發生錯誤。規范/不規范代碼示例參見B.2.8。
6.1.1.10 條件比較不充分
審計指標:執行比較時不應部分比較或不充分的比較。
審計人員應檢查比較條件是否充分,防止不充分比較造成邏輯繞過風險。
6.1.1.11 結構體長度
審計指標:不應將結構體的長度等同于其各個成員長度之和。
審計人員應檢查代碼是否將結構體的長度等同于其各成員長度之和,不應將結構體長度等同于各成員長度之和。結構對象可能存在無名的填充字符從而造成結構體長度與各個成員長度之和并不相等。不規范代碼示例參見B.2.9。
6.1.1.12 數值賦值越界
審計指標:應避免數值賦值越界。
審計人員應檢查代碼是否存在數值賦值超出數值類型范圍,應避免賦值越界。不規范代碼示例參見B.2.10。
6.1.1.13 除零錯誤
審計指標:應避免除零錯誤。
審計人員應檢查代碼是否存在除零操作,應避免除零錯誤。規范/不規范代碼示例參見B.2.11。
6.1.1.14 邊界值檢查缺失
審計指標:數值范圍比較時,不宜遺漏邊界值檢查。
審計人員宜檢查代碼在進行數值范圍比較時,是否遺漏了最小值、最大值邊界值檢查。規范/不規范代碼示例參見B.2.12。
6.1.1.15 數據信任邊界的違背
審計指標:代碼宜避免將可信和不可信數據組合在同一結構體中,違背信任邊界。
審計人員宜檢查代碼是否將來自可信源和非可信源的數據混合在同一數據結構體或同一結構化的消息體中,模糊了二者的邊界。
6.1.1.16 條件語句缺失默認情況
審計指標:條件語句中不宜缺失默認情況。
審計人員宜檢查代碼中條件語句是否存在缺失默認情況的情形。
6.1.1.17 無法執行的死代碼
審計指標:不宜包含無法執行的死代碼。
審計人員宜檢查代碼是否存在無法執行的死代碼。
6.1.1.18 表達式永真或永假
審計指標:不應出現表達式永真或永假代碼。
審計人員應檢查代碼是否存在表達式邏輯永真或永假代碼的情況。
6.1.2 輸出編碼
6.1.2.1 跨站腳本
審計指標:應避免跨站腳本攻擊。
審計人員應檢查代碼中用戶提交的數據放到頁面中,被送到瀏覽器進行顯示前,是否進行了驗證或過濾。
6.1.2.2 Web應用重定向后執行額外代碼
審計指標:Web應用不宜在重定向后執行額外代碼。
審計人員宜檢查Web應用是否存在重定向后執行額外代碼的情況, 如果結果為肯定, 則提示存在安全風險。
6.1.2.3 URL重定向
審計指標:不應開放不可信站點的URL重定向。
審計人員應檢查代碼是否存在URL重定向到不可信站點的情況, 因重定向到不可信站點, 可能會發生訪問安全風險。
GB/T 39412-2020 信息安全技術 代碼安全審計規范
推薦文章: