1. 程式人生 > >PHP漏洞全解(一)PHP網站的安全性問題【轉】

PHP漏洞全解(一)PHP網站的安全性問題【轉】

轉自 https://www.cnblogs.com/pingliangren/p/5586940.html

本文主要介紹針對PHP網站常見的攻擊方式,包括常見的sql注入,跨站等攻擊型別。同時介紹了PHP的幾個重要引數設定。後面的系列文章將站在攻擊者的角度,為你揭開PHP安全問題,同時提供相應應對方案。

 

針對PHP的網站主要存在下面幾種攻擊方式:

1、命令注入(Command Injection)

2、eval注入(Eval Injection)

3、客戶端指令碼攻擊(Script Insertion)

4、跨網站指令碼攻擊(Cross Site Scripting, XSS)

5、SQL注入攻擊(SQL injection)

6、跨網站請求偽造攻擊(Cross Site Request Forgeries, CSRF)

7、Session 會話劫持(Session Hijacking)

8、Session 固定攻擊(Session Fixation)

9、HTTP響應拆分攻擊(HTTP Response Splitting)

10、檔案上傳漏洞(File Upload Attack)

11、目錄穿越漏洞(Directory Traversal)

12、遠端檔案包含攻擊(Remote Inclusion)

13、動態函式注入攻擊(Dynamic Variable Evaluation)

14、URL攻擊(URL attack)

15、表單提交欺騙攻擊(Spoofed Form Submissions)

16、HTTP請求欺騙攻擊(Spoofed HTTP Requests)

以後的每期連載,會逐個介紹這些漏洞的原理和防禦方法。

幾個重要的php.ini選項:

RegisterGlobals

php>=4.2.0,php.ini的register_globals選項的預設值預設為Off,當register_globals

的設定為On時,程式可以接收來自伺服器的各種環境變數,包括表單提交的變數,而且由於PHP不必事先初始化變數的值,從而導致很大的安全隱患。

例1:

//check_admin()用於檢查當前使用者許可權,如果是admin設定$is_admin變數為true,然後下面判斷此變數是否為true,然後執行管理的一些操作。

  1. //ex1.php 

  2.  

  3. if(check_admin()) 

  4. $is_admin=true; 

  5. if($is_admin) 

  6. do_something(); 

  7. ?> 

這一段程式碼沒有將$is_admin事先初始化為Flase,如果register_globals為On,那麼我們直接提交http://www.sectop.com/ex1.php?is_admin=true,就可以繞過check_admin()的驗證:

例2:

  1. //ex2.php 

  2.  

  3. if(isset($_SESSION["username"])) 

  4. do_something(); 

  5. else 

  6. echo"您尚未登入!"; 

  7. ?> 

當register_globals=On時,我們提交http://www.sectop.com/ex2.php?_SESSION[username]=dodo,就具有了此使用者的許可權所以不管register_globals為什麼,我們都要記住,對於任何傳輸的資料要經過仔細驗證,變數要初始化。

safe_mode

安全模式,PHP用來限制文件的存取、限制環境變數的存取,控制外部程式的執行。啟用

安全模式必須設定php.ini中的safe_mode=On

1、限制檔案存取

safe_mode_include_dir="/path1:/path2:/path3"

不同的資料夾用冒號隔開

2、限制環境變數的存取

safe_mode_allowed_env_vars=string

指定PHP程式可以改變的環境變數的字首,如:safe_mode_allowed_env_vars=PHP_ ,當這個選項的值為空時,那麼php可以改變任何環境變數

safe_mode_protected_env_vars=string用來指定php程式不可改變的環境變數的字首。

3、限制外部程式的執行

safe_mode_exec_dir=string

此選項指定的資料夾路徑影響system、exec、popen、passthru,不影響shell_exec和“``”。

disable_functions=string

不同的函式名稱用逗號隔開,此選項不受安全模式影響。

magicquotes

用來讓php程式的輸入資訊自動轉義,所有的單引號(“'”),雙引號(“"”),反斜槓(“\”)和空字元(NULL),都自動被加上反斜槓進行轉義magic_quotes_gpc=On用來設定magicquotes為On,它會影響HTTP請求的資料(GET、POST、Cookies)程式設計師也可以使用addslashes來轉義提交的HTTP 請求資料,或者用stripslashes 來刪除轉義。

管理好自己的情緒,你就是優雅的,控制好自己的心態,你就是成功的。