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


本文主要介紹針對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 來刪除轉義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM