簡體   English   中英

是否可以進行“ php注入”?

[英]Is it possible to make a “php injection”?

我正在構建一個Web應用程序,並且擔心安全性。

這是一種進行“ PHP注入”的方式,也有可能進行“ SQL注入”嗎? 這意味着客戶端可以發送一些將在服務器上執行的php代碼。

在不使用“ eval”函數之前,我想說“ no”,因為當我們通過$ _GET和$ _POST獲得值時,所有數據都被視為簡單字符串...但是也許我不看到明顯的攻擊。

通常,除非您使用可能解析並執行PHP的方法對其進行評估,否則不要這樣做。 您已經提到過eval,但是還有其他一些具有類似eval的屬性的函數(例如preg_replace ,如果攻擊者設法注入/e修飾符),或者可能以其他方式允許不需要的訪問級別(例如system() )。

另外,如果攻擊者可以上載文件並將其解釋為PHP,則他可以運行PHP代碼。 nginx 易於配置 ,使攻擊者可以在圖像文件中執行PHP代碼。 使您的網站include()他的代碼的方法也一樣—可能是通過用他的上載覆蓋文件,或更改include()參數以指向遠程站點(如果未在php.ini中禁用)。

您可以通過多種方式進行“ PHP注入”。 eval是其中之一。 shell_exec和相關函數也有風險(始終使用escapeshellarg !),但是常見的主題是將用戶輸入放在可以執行的位置。 SQL注入就是這種情況,其中查詢是一個包含用戶輸入的字符串,然后在MySQL服務器上執行。

一個稍微模糊的例子是文件上傳。 如果您允許將文件上傳到您的服務器,請不要無限制地訪問它們! 有人可以上傳一個PHP文件,然后訪問它並完全控制您的網站,所以...是的,請謹慎上載!

如果PHP腳本使用來自上游組件的外部影響的輸入來“構成代碼段的全部或一部分”,則將其稱為PHP注入,但是它不會中和或錯誤地中和了可能修改預期代碼的語法或行為的特殊元素。段” [1]

因此,對於以PHP作為處理器的任何函數,直接或間接將其參數解釋為PHP的任何函數都可能易於注入PHP。 顯然,這包括eval函數 ,還包括帶有PREG_REPLACE_EVAL修飾符的 create_functionpreg_replace類的函數。

此外,它還包括例程,這些例程生成PHP代碼,以便在應用程序安裝期間將其寫入諸如配置文件之類的文件中。 或者是通過php -r …執行PHP的例程,即使通過escapeshellarg進行了escapeshellarg

看看CWE-94觀察到的示例:代碼生成的不當控制(“代碼注入”)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM