[轉載]25 個最危險程式錯誤
原文網址
將內容翻譯解釋如下
元件間的不安全互動
1. 不合適的輸入驗證。
2. 不合適的編碼或者輸出跳脫字元。
3. SQL查詢結構失敗(攻擊方式如 SQL injection)。
4. 網頁結構保護失敗(攻擊方式如 cross-site scripting)。
5. 作業系統指令結構失敗((攻擊方式如OS command injection)。
6. 對於敏感資料的明碼轉換。
7. 跨網站的偽造要求 (Cross-Site Request Forgery,簡稱CSRF):已登入Web
應用程式的合法使用者執行到惡意的HTTP指 令,但Web應用程式卻當成合法需
求處理 ,使得惡意指 令被正常執行 ,案例包括社交網站分享的 QuickTime、Flash
影片中藏有惡意的HTTP請求。
8. Race Condition:當許多的process同時對同一個資料進行存取和操作,且
執行的結果是依照特定的存取順序而有所 不同,稱為race condition。
9. 錯誤訊息資料遺失。
危險的資源管理
10. 對於記憶體緩衝區範圍操作失敗。
11. 對於臨界區間資 料外部控制。
12. 對於檔案名稱或路徑外部控制。
13. 不可靠的搜尋路徑。
14. 源代碼撰寫失敗(攻擊方式如 code injection)。
15. 下載未經完整性確認的源代碼。
16. 不合適的關閉或釋放資源。
17. 不合適的初始化。
18. 不正確的計算。
多孔防禦
19. 不合適的存取控制(認証)。
20. 使用遭破壞或者危險的加密演算法。
21. 寫死密碼。
22. 對於關鍵資源不安全的許可。
23. 隨機值使用不夠。
24. 非必要特權使用。
25. 客戶端執行的伺服器端安全。
名詞說明:
Hard Code, Hard Coding
寫死;指的是在軟體實作上,把輸出或輸入的相關 參數(例如:路徑、輸出的形
式、格式) 直接寫死在原始碼中,而非在執行時期由外界指定的設定、資源、資
料、或者格式做出適當回應。
SQL Injection
以下是此類攻擊的流程:
1. 駭客運用搜尋引擎尋找網頁上的漏洞 ,並運用自動化工具攻擊網路服務器。
2. 一個<script>字串附加到在後端運行的SQL伺服器中所有的文本或可變長字
串列中。
3. 這個腳本與駭客所控制伺服器連接。該伺服器含有一些常用軟體的利用代
碼,如Microsoft MS06-014,協 力廠商軟體漏洞 ,(例如常用的媒體播放器及內
容下載軟體)。有的時候還有一些零時差 漏洞 。
4. 當終端使用者試圖用IE 流覽正常的網站時,由於這些網頁都 將從SQL伺服器
獲取資料,這些資料同時包含 了惡意腳本<script>。而這些腳本會自動連接到駭
客的網站。
5. 如果普通使用者沒有依照建議安裝修正程式,防毒軟體,或尚未安裝
Microsoft或協力廠商軟體最新版本的更新,那麼他們的電腦就會被感染。
Cross-Site Scripting
中文譯為「跨站腳本攻擊」 ,簡稱XSS。此乃是駭客利用網站上允許使用者輸入
字元或字串的欄位插入HTML與Script語言,造成其他正常使用者在觀看網頁的
同時,瀏覽器會主動下載並執行部份惡意的程式碼,或被暗地裡導入到惡意的網
站,而受到某種型態的影響。如今大部份的網站都強調所謂與使用者互動的功
能,加入許多允許使用者輸入字串的欄位,如:留言板、討論區、查詢欄位等;
有些互動的功能將使用者輸入的字串存入後端資 料庫,如果駭客輸入某些含有攻
擊式的語言,一旦使用者進入此頁面時,因執行未預期的動作而將遭受某種程度
的威脅。
OS Command Injection
命 令植入攻擊,程式中若使用system(),倒引號「`」 來執行 shell,可能會遭受
OS Command Injection。以PHP而言,可用escapeshellarg(),escapeshellcmd()
函式避免風險。若 php.ini裡的magic_quotes_gpc設為on,則GET/POST/Cookie
傳入之資 料中所包含的所有單引號「'」 、雙引號「"」、反斜線「\」與null字元
會自動被加上反斜線跳脫。
Code Injection
遠端不明源代碼注入,原理是這樣的,我們在程式碼中,找一塊沒有用到的地方
在這個地方寫入我們的程式碼,然後在程式執行到一半時,跳到這個我們自己寫
的程式碼 來執行 ,完畢以後再跳回原程式碼。