幾天前我參加了一個研討會,他們討論的是「危險的」PHP功能。但是他們沒有說我們應該使用它們。他們命名爲eval()
,preg_match()
,exec()
等等。我應該怎樣或應該使用被認爲「危險」的php函數?
雖然我不使用它們,或者不經常使用它們,但有時我不得不使用它們。使用這些功能被認爲是不好的做法?即使我知道我在哪裏使用它們,用戶無法達到它?
編輯: 對於的preg_match()的問題,看看這個: preg_match() security hole
幾天前我參加了一個研討會,他們討論的是「危險的」PHP功能。但是他們沒有說我們應該使用它們。他們命名爲eval()
,preg_match()
,exec()
等等。我應該怎樣或應該使用被認爲「危險」的php函數?
雖然我不使用它們,或者不經常使用它們,但有時我不得不使用它們。使用這些功能被認爲是不好的做法?即使我知道我在哪裏使用它們,用戶無法達到它?
編輯: 對於的preg_match()的問題,看看這個: preg_match() security hole
所有主要允許注入代碼到你的系統上運行,如果你不保護反對那些方法。如果你在不知道危險是什麼的情況下使用它們,你有可能在腳下開槍自殺。如果你完全知道自己在做什麼,並且你別無選擇,只能使用這種方法,那麼在任何情況下你都無能爲力。
這個問題有可開發的功能非常全面的列表在PHP
謝謝你的名單。 – 2011-06-01 08:38:29
嗯......我不認爲preg_match
是東西,所以「危險」。另一方面,eval
和exec
有點不好。特別是exec
甚至在託管服務器上大都被禁止,因爲它增加了真正巨大的安全風險。
您可以使用正則表達式執行代碼! – 2011-06-01 07:52:14
我說「這樣」,我沒有說它根本就沒有:)在preg_match上使用/ e很少用在代碼上,這種代碼不是寫入漏洞利用... Surly有很多人試圖找到任何可能的方式來傷害某人的網站,但比較'preg_match'到'exec',我不認爲'preg_match'是最糟糕的一個。爲了安全......好吧,很多PHP函數都是安全漏洞:) – RRStoyanov 2011-06-01 07:56:41
真的這是一個味道的問題。這真的只是有足夠的繩子掛上自己。只要您100%確定沒有用戶可以直接輸入eval
或exec
聲明,您可能沒有問題,但很難說明不應該有一種不同的,更安全的方式來執行您的任務,重新嘗試。
如果您的服務器曾經受到攻擊,可能是來自一個安全性較差的表單或include()調用的代碼注入攻擊,那麼一些用處不大但功能非常強大的PHP函數會讓攻擊者通過exec對整個系統進行太多的控制(),所以你可以在你的ini文件中完全阻止這些函數。
報價的php.ini
;此指令允許你禁用某些功能安全 ; reasons.It收到一個逗號分隔的功能列表 ;名稱。此指令是不是受安全模式是否爲 ;打開或關閉。 disable_functions選項=
編輯 JohnP的鏈接列表,你應該警惕的
在這裏,所有的功能在這裏筆者問爲什麼EVAL是危險的帖子: http://blog.joshuaeichorn.com/archives/2005/08/01/using-eval-in-php/,請閱讀answears,在這裏另一個有趣和短小的文章: http://www.hardened-php.net/suhosin/a_feature_list:eval_black_and_whitelist.html
恕我直言,問題是,如果你使用像eval或exec這樣的函數,你需要100%知道什麼可變傳遞給t下襬。如果exec可以在你的操作系統中「插入」,它可能是真正的危險。
問候, 湯姆
有沒有這樣的事情「危險」的功能。有
誰不處理用戶輸入正確每個PHP函數可以是「危險的」,如果你沒有采取適當的安全措施。這包括「回聲」(XSS),「郵件」(主要注入),文件功能(例如,讀取文件(/ etc/passwd)等。
*每個* php函數都可能是危險的,真的嗎? is_int()是危險的嗎? – 2013-01-16 10:56:37
他們提到了爲什麼'preg_match()很明顯,因爲它們允許你在主機上調用任意程序,但是這個對我來說並不明確。 – Kris 2011-06-01 07:49:36
http://en.wikipedia.org/wiki/ReDoS – 2011-06-01 07:52:05
'preg_replace'在你使用'e因爲它意味着''eval()'替換(view [view] [PCRE]上的修飾符部分(http://es2.php.net/manual/en/reference.pcre.pattern.modifiers.php))。但只適用於'preg_replace',不知道@edem是否意味着'preg_replace'而不是'preg_match',或者它對preg_match有一些我不知道的危險 – 2011-06-01 07:55:11