任意代碼執行漏洞

來源:互聯網
上載者:User
--背景介紹-- 當應用在調用一些字串轉化為代碼的函數時,沒有考慮使用者是否能控制這個字串,將造成代碼注入漏洞。
--相關函數-- PHP          eval()、assert() python      exec() Java         沒有類似於前面兩者的函數,但是有反射機制,並且有基於反射機制的運算式引擎,如:0GNL、SpEL、                        MVEL等

--PHP中能造成代碼注入的主要函數-- ①eval()
<span style="font-size:14px;"><?php$data = $_GET['data'];eval($ret = $data);echo $ret?></span>
使的$data=phpinfo(),則可以顯示phpinfo.php檔案的內容
②assert() 和前者一樣,都是將字串當成代碼來執行。
③preg_replace()+/e模式
<?php$data = $_GET['data'];preg_replace('/<data>(.*)<\/data>/e','$ret = "\\1";',$data);?>
echo $reat
使的?data=<data>${phpinfo()}</data>
執行個體:


④unserialize() (還原序列化函數)


--修複方案-- 對於eval()函數,一定要保證使用者不能輕易接觸eval的參數,如果接觸一定要使用單引號包裹可控代碼,並在插入前進行addslashes
<?php$data = addslashes($data);eval("$data = deal('$data')");?>

對於preg_replace()函數,要放棄使用/e修飾符,也可以使用preg_replace_callback()函數代替。如果一定要使用該函數,請保證第二個參數中,對於正則匹配出的對象用單引號包裹。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.