-
代碼注入
鎖定
隨着B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用户輸入數據的合法性進行判斷,使應用程序存在安全隱患。
- 中文名
- 代碼注入
- 實 質
- 用户可以提交一段數據庫查詢代碼
- 對 象
- 應用程序的程序員
- 目 的
- 獲得某些他想得知的數據
代碼注入定義
用户可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。
代碼注入代碼注入的用途
代碼注入蓄意的用途
惡意使用
惡意用途的代碼注入可包括:
- 透過SQL注入(見下文)隨意修改數據庫中的值。影響所及可從某網站外觀損毀,到對敏感數據嚴重的破壞。
- 當用户拜訪惡意網站時,透過網頁瀏覽器或其插件的漏洞安全隱患,進行代碼注入,以便安裝流氓軟件到用户機器上。
- 透過PHP或者ASP注入安裝流氓軟件或者運行惡意代碼於服務端。
- 於視窗系統利用Shell注入安全隱患對系統服務做手腳,達成提權到本地端系統使用權限的目的。
- 從網頁瀏覽器利用HTML/腳本注入(跨網站腳本)進行連線竊取 / cookies竊取進而冒充他人,獲取他人個人敏感數據。
善意使用
某些人可能會出於善意而使用代碼注入。例如,透過代碼注入以改變或者調試某程序或者系統的行為可以"擺弄"系統以某種方式表現其行為而不懷任何惡意。打比方説:
- 代碼注入可以添入某原本搜索結果頁面設計上沒有的字段,方便用户。
- 透過對原本設計默認函數沒有曝光的字段賦值,代碼注入可提供一個全新的方式來過濾、排序、或者歸類數據。
這些人訴諸此種替代手段大致是下面幾種原因之一:
- 對軟件中希望改進函數進行潤飾的其他方法證明不可能,或者
- 其他對軟件修改的方式代價過高,或者
- 其他對軟件修改的方式過度艱苦。
一般開發社羣對以此為目的的代碼注入不表歡迎。他們稱這種行為為三腳貓、半調子、或者駭 / 黑程序。(kludge or hack)
某些開發者允許或者甚至表揚代碼注入的使用來“加強”他們的軟件;通常是因為該方案提供了較不昂貴的方式來實現新的或者特殊化的功能。不幸的是,其副作用與無法列管的藴含式可能相當危險。
代碼注入非蓄意的用途
某些用户可能會不經意的進行代碼注入,因為他們對程序提供的輸入,沒列在當初開發系統者的考慮中。例如:
- 用户可能視某個包含表示字符或者字符字符串為合法輸入,而不知該字符被開發者所保留而有特殊意義 (像 "張三 & 李四" 裏的 "&" 字符,或者英文約翰的 M&M 巧克力: "John's M&M's"裏頭的單引號)。
代碼注入避免代碼注入
要避免代碼注入的種種問題,得充分發揮輸入輸出處理保全,例如:
- 輸入確認。
- 更換危險字符。例如在PHP透過addslashes()函數保護SQL注入。
- 輸入編碼。
- 輸出編碼。
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:13次歷史版本
- 最近更新: 与是非1