PHP漏洞全解(一)-PHP網(wǎng)站的安全性問(wèn)題
針對(duì)PHP的網(wǎng)站主要存在下面幾種攻擊方式:
1、命令注入(Command Injection)
2、eval注入(Eval Injection)
3、客戶端腳本攻擊(Script Insertion)
4、跨網(wǎng)站腳本攻擊(Cross Site Scripting, XSS)
5、SQL注入攻擊(SQL injection)
6、跨網(wǎng)站請(qǐng)求偽造攻擊(Cross Site Request Forgeries, CSRF)
7、Session 會(huì)話劫持(Session Hijacking)
8、Session 固定攻擊(Session Fixation)
9、HTTP響應(yīng)拆分攻擊(HTTP Response Splitting)
10、文件上傳漏洞(File Upload Attack)
11、目錄穿越漏洞(Directory Traversal)
12、遠(yuǎn)程文件包含攻擊(Remote Inclusion)
13、動(dòng)態(tài)函數(shù)注入攻擊(Dynamic Variable Evaluation)
14、URL攻擊(URL attack)
15、表單提交欺騙攻擊(Spoofed Form Submissions)
16、HTTP請(qǐng)求欺騙攻擊(Spoofed HTTP Requests)
以后的每期連載,會(huì)逐個(gè)介紹這些漏洞的原理和防御方法。
幾個(gè)重要的php.ini選項(xiàng):
RegisterGlobals
php>=4.2.0,php.ini的register_globals選項(xiàng)的默認(rèn)值預(yù)設(shè)為Off,當(dāng)register_globals
的設(shè)定為On時(shí),程序可以接收來(lái)自服務(wù)器的各種環(huán)境變量,包括表單提交的變量,而且由于PHP不必事先初始化變量的值,從而導(dǎo)致很大的安全隱患。
例1:
//check_admin()用于檢查當(dāng)前用戶權(quán)限,如果是admin設(shè)置$is_admin變量為true,然后下面判斷此變量是否為true,然后執(zhí)行管理的一些操作。
- //ex1.php
- if(check_admin())
- {
- $is_admin=true;
- }
- if($is_admin)
- {
- do_something();
- }
- ?>
這一段代碼沒(méi)有將$is_admin事先初始化為Flase,如果register_globals為On,那么我們直接提交http://www.sectop.com/ex1.php?is_admin=true,就可以繞過(guò)check_admin()的驗(yàn)證:
例2:
- //ex2.php
- if(isset($_SESSION["username"]))
- {
- do_something();
- }
- else
- {
- echo"您尚未登錄!";
- }
- ?>
當(dāng)register_globals=On時(shí),我們提交http://www.sectop.com/ex2.php?_SESSION[username]=dodo,就具有了此用戶的權(quán)限所以不管register_globals為什么,我們都要記住,對(duì)于任何傳輸?shù)臄?shù)據(jù)要經(jīng)過(guò)仔細(xì)驗(yàn)證,變量要初始化。
safe_mode
安全模式,PHP用來(lái)限制文檔的存取、限制環(huán)境變量的存取,控制外部程序的執(zhí)行。啟用
安全模式必須設(shè)置php.ini中的safe_mode=On
1、限制文件存取
safe_mode_include_dir="/path1:/path2:/path3"
不同的文件夾用冒號(hào)隔開(kāi)
2、限制環(huán)境變量的存取
safe_mode_allowed_env_vars=string
指定PHP程序可以改變的環(huán)境變量的前綴,如:safe_mode_allowed_env_vars=PHP_ ,當(dāng)這個(gè)選項(xiàng)的值為空時(shí),那么php可以改變?nèi)魏苇h(huán)境變量
safe_mode_protected_env_vars=string用來(lái)指定php程序不可改變的環(huán)境變量的前綴。
3、限制外部程序的執(zhí)行
safe_mode_exec_dir=string
此選項(xiàng)指定的文件夾路徑影響system、exec、popen、passthru,不影響shell_exec和“``”。
disable_functions=string
不同的函數(shù)名稱用逗號(hào)隔開(kāi),此選項(xiàng)不受安全模式影響。
magicquotes
用來(lái)讓php程序的輸入信息自動(dòng)轉(zhuǎn)義,所有的單引號(hào)(“'”),雙引號(hào)(“"”),反斜杠(“\”)和空字符(NULL),都自動(dòng)被加上反斜杠進(jìn)行轉(zhuǎn)義magic_quotes_gpc=On用來(lái)設(shè)置magicquotes為On,它會(huì)影響HTTP請(qǐng)求的數(shù)據(jù)(GET、POST、Cookies)程序員也可以使用addslashes來(lái)轉(zhuǎn)義提交的HTTP 請(qǐng)求數(shù)據(jù),或者用stripslashes 來(lái)刪除轉(zhuǎn)義。




















