eval或許在咱們平時寫網頁的時候不多使用,但涉及安全領域,php中的eval是很是常見,下面就來講說eval是什麼?php
1、eval的基本使用瀏覽器
要說eval,首先要從一段連只會寫php Helloworld的萌新都能看懂的代碼提及。安全
首先,這段代碼的運行結果是什麼?服務器
<?php $str = "echo 'abc';"; echo $str; ?>
估計你們連個運行結果截圖都不用看了,就是echo 'abc';jsp
但是,要是將echo改爲eval,也就是:工具
<?php $str = "echo 'abc';"; eval ($str); ?>
那麼程序的運行結果,就變成abc:post
也就是上面的echo 'abc',被php執行了!網站
2、eval被黑客的運用.net
正常狀況,咱們寫php網頁,該是什麼就寫什麼代碼,幾乎不多狀況在eval中鑲嵌一段又一段代碼來繞暈本身和與咱們一同開發的隊友。所以eval對於開發者來講,或許是一個冷門的關鍵字。code
但是eval對於黑客來講,就用處大了。好比,在你的服務器,掛個php,或者找個安全漏洞,上傳個php到你的服務器,這個php以下。
<?php eval ($_POST['a']); ?>
就這麼簡單。
首先,這個php會接收以post形式傳過來的,name=a的東西,固然黑客要是嫌麻煩改爲get,直接在瀏覽器的地址欄傳參數也行。post、get傳參數是很基本的東西了,這就再也不贅述了,不會的能夠參考《【php】基本語法與頁面之間數值傳遞》(https://blog.csdn.net/yongh701/article/details/41908237)。
而後,因爲eval的存在,這個php會執行以post形式傳過來的,name=a的東西。這樣的話,因爲php是能直接操做服務器上的文件的,因此黑客只要能將這個php放到你的服務器,同時用抓包工具找到這php上傳以後的地址,基本就是能夠控制你的服務器的意思的。
和jsp的菜刀基本是同一個意思
因此,基本上,你看到大部分網站的上傳的地方都作了文件上傳類型的識別。