" "
‘ '
` %60
文件包含
PHP可能出現文件包含的函數:include、include_once、require、require_once、show_source、highlight_file、readfile、file_get_contents、fopen、 nt>file
防范方法:
對輸入數據進行精確匹配,比如根據變量的值確定語言en.php、cn.php,那么這兩個文件放在同一個目錄下’language/’.$_POST[‘lang’].’.php’,那么檢查提交的數據是否是en或者cn是最嚴格的,檢查是否只包含字母也不錯
通過過濾參數中的/、..等字符
代碼注入
PHP可能出現代碼注入的函數:eval、preg_replace+/e、assert、call_user_func、call_user_func_array、create_function
查找程序中程序中使用這些函數的地方,檢查提交變量是否用戶可控,有無做輸入驗證
防范方法:
輸入數據精確匹配
白名單方式過濾可執行的函數
SQL注入
SQL注入因為要操作數據庫,所以一般會查找SQL語句關鍵字:insert、delete、update、select,查看傳遞的變量參數是否用戶可控制,有無做過安全處理
防范方法:
使用參數化查詢
XPath注入
Xpath用于操作xml,我們通過搜索xpath來分析,提交給 nt face="Arial, sans-serif">xpath函數的參數是否有經過安全處理
防范方法:
對于數據進行精確匹配
HTTP響應拆分
PHP中可導致HTTP響應拆分的情況為:使用header函數和使用$_SERVER變量。注意PHP的高版本會禁止HTTP表頭中出現換行字符,這類可以直接跳過本測試。
防范方法:
精確匹配輸入數據
檢測輸入輸入中如果有\r或\n,直接拒絕
文件管理
PHP的用于文件管理的函數,如果輸入變量可由用戶提交,程序中也沒有做數據驗證,可能成為高危漏洞。我們應該在程序中搜索如下函數:copy、rmdir、unlink、delete、fwrite、chmod、fgetc、fgetcsv、fgets、fgetss、file、file_get_contents、fread、readfile、ftruncate、file_put_contents、fputcsv、fputs,但通常PHP中每一個文件操作函數都可能是危險的。
http://ir.php.net/manual/en/re
f.filesystem.php
防范方法:
對提交數據進行嚴格匹配
限定文件可操作的目錄
文件上傳
PHP文件上傳通常會使用move_uploaded_file,也可以找到文件上傳的程序進行具體分析
防范方式:
使用白名單方式檢測文件后綴
上傳之后按時間能算法生成文件名稱
上傳目錄腳本文件不可執行
注意%00截斷
變量覆蓋
PHP變量覆蓋會出現在下面幾種情況:
遍歷初始化變量
例:
foreach($_GET as $key => $value)
$$key = $value;
函數覆蓋變量:parse_str、mb_parse_str、import_request_variables
Register_globals=ON時,GET方式提交變量會直接覆蓋
防范方法:
設置Register_globals=OFF
不要使用這些函數來獲取變量
動態函數
當使用動態函數時,如果用戶對變量可控,則可導致攻擊者執行任意函數。
例:
$myfunc = $_GET['myfunc' font>];
$myfunc();
?>
防御方法:
不要這樣使用函數
會話安全
HTTPOnly設置
session.cookie_httponly = ON時,客戶端腳本(JavaScript等)無法訪問該cookie,打開該指令可以有效預防通過XSS攻擊劫持會話ID
domain設置
檢查session.cookie_domain是否只包含本域,如果是父域,則其他子域能夠獲取本域的cookies
path設置
檢查session.cookie_path,如果網站本身應用在/app,則path必須設置為/app/,才能保證安全
cookies持續時間
檢查session.cookie_lifetime,如果時間設置過程過長,即使用戶關閉瀏覽器,攻擊者也會危害到帳戶安全
secure設置
如果使用HTTPS,那么應該設置session.cookie_secure=ON,確保使用HTTPS來傳輸cookies
session固定
如果當權限級別改變時(例如核實用戶名和密碼后,普通用戶提升到管理員),我們就應該修改即將重新生成的會話ID,否則程序會面臨會話固定攻擊的風險。
CSRF
跨站請求偽造攻擊,是攻擊者偽造一個惡意請求鏈接,通過各種方式讓正常用戶訪問后,會以用戶的身份執行這些惡意的請求。我們應該對比較重要的程序模塊,比如修改用戶密碼,添加用戶的功能進行審查,檢查有無使用一次性令牌防御csrf攻擊。
加密
明文存儲密碼
采用明文的形式存儲密碼會嚴重威脅到用戶、應用程序、系統安全。
密碼弱加密
使用容易破解的加密算法,MD5加密已經部分可以利用md5破解網站來破解
密碼存儲在攻擊者能訪問到的文件
例如:保存密碼在txt、ini、conf、inc、xml等文件中,或者直接寫在HTML注釋中
認證和授權
用戶認證
檢查代碼進行用戶認證的位置,是否能夠繞過認證,例如:登錄代碼可能存在表單注入。
檢查登錄代碼有無使用驗證碼等,防止暴力破解的手段
函數或文件的未認證調用
一些管理頁面是禁止普通用戶訪問的,有時開發者會忘記對這些文件進行權限驗證,導致漏洞發生
原文轉自:http://www.sectop.com/?p=111