讀《重燃你的php之火》總結筆記

1.文件包含變量導致遠程文件包含
include ("$cfgdir/site${site}.php"); //把$cfgdir 這個路徑裏的site${site}.php 包含進來
可以把變量$site 指定遠程文件http://evil.com/cmd.gif 去調用,也可以是本地的一個文件
解決方案:
php.ini 裏的allow_url_fopen 設爲off 禁止遠程使用文件

2.文件目錄列表
目錄列表,下載重要文件
解決方案:
open_base_dir 禁止使用目錄列表,或每個目錄下都存放一個index.html,推薦第一種

3.文件操作函數導致源代碼泄漏(fopen(),file(),readfile(),openfile())
$articlearray=openfile("$dbpath/$fid/$tid.php"); //打開$dbpath/$fid 這個路徑的$tid.php 文件
$topic_detail=explode("|",$articlearray[0]); //用分割符|讀出帖子的內容
構造/read.php?fid=123&tid=../index 可以查看上級index.php源代碼
fwrite() 寫入一句話***
unlink() 傳入任意文件,刪除任意文件
解決方案:
過濾特殊字符

4.任意代碼執行
eval(),preg_replace(),exec(),system(),popen(),proc_open(),proc_close()
提交可執行代碼和系統命令
解決方案:
使用escapeshellarg()或escapeshellcmd()函數過濾

5.特殊字符過濾
../ win路徑隱患
..\ win和linux路徑隱患
< > 跨站腳本***xxs
'?? 執行系統命令
; | 截斷程序流程

6.php的一些安全配置參數

safe_mode_gid = On? //開啓安全模式,會禁止系統命令執行函數
register_globals = Off //關閉全局變量,防止變量覆蓋漏洞
php_admin_value open_basedir /usr/local/apache/htdocs //限制php文件操作目錄爲網站根目錄
allow_url_fopen = Off //關閉遠程文件打開功能,防止include('')文件包含一句話***

<Directory /usr/local/apache/htdocs/upload>
php_flag engine off
#如果是php3換成php3_engine off
#防止讀取任意文件和執行任意命令,限制上傳目錄權限
open_basedir = "/usr/local/apache/htdocs/" #限制允許操作的父目錄
#命令執行漏洞可以用escapeshellcmd()函數過濾傳入的命令參數,後再使用,杜絕命令執行漏洞
</Directory>

error_reporting = E_ALL & ~E_NOTICE //屏蔽警告信息
display_errors = On //屏蔽錯誤信息
log_errors = On? //開啓錯誤日誌
error_log = /usr/local/apache/logs/php_error.log //錯誤日誌存放目錄
disable_functions = phpinfo, get_cfg_var //禁用一些危險函數可以放在這裏
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章