任意代碼執行漏洞

背景介紹php

當應用在調用一些能將字符串轉化成代碼的函數(如php中的eval)時,沒有考慮到用戶是否能控制這個字符串,將形成代碼注入漏洞。狹義的代碼注入一般指將可執行代碼注入到當前頁面中,如php的eval函數,能夠將字符串表明的代碼做爲php代碼執行,當前用戶可以控制這段字符串時,將產生代碼注入漏洞(也稱命令執行)。廣義上的代碼注入,能夠覆蓋大半安全漏洞的分類java

 

漏洞成因python

幾種經常使用語言,都有將字符串轉化成代碼去執行的相關函數shell

php       :   eval,assert數據庫

python  :   execjson

java      :   java中沒有相似php中的eval函數這種直接能夠將字符串轉化爲代碼執行的函數,可是有反射機制,並指望有各類基於反射機制的表達式引擎,如:OGNL、SpEL等數組

 

爲何使用執行代碼函數安全

應用有時候會考慮靈活性、簡潔性,在代碼中調用eval之類的函數去處理服務器

 

phpcms中的string2array函數

這個函數能夠將phpcms的數據庫settings的字符串形式的數組內容轉換爲真實的數組函數

 

漏洞危害

執行代碼  ;  上網站寫shell   ;   甚至控制服務器

 

漏洞挖掘

 

 

具體操做

 

漏洞防護

使用json保存數組,當讀取時就不須要使用eval了

對於必須使用eval的地方,必定嚴格處理用戶數據

字符串使用單引號包括可控代碼,插入前使用addslashes轉義

放棄使用preg_replace的e修飾符,使用preg_replace_callback()替換

若必須使用preg_replace的e修飾符,則必用單引號包裹正則匹配出的對象

相關文章
相關標籤/搜索