一、php.ini配置
1、
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,
ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,
stream_socket_server,fsocket,phpinfo #禁用的函数
2、
expose_php = off #避免暴露PHP信息
3、
display_errors = off #关闭错误信息提示
4、
register_globals = off #关闭全局变量
5、
enable_dl = off #禁止动态加载链接库
6、
allow_url_include = off #避免远程调用文件
7、
allow_url_fopen = Off #禁用打开远程url
以下方法将无法获取远程url内容
$data = file_get_contents("http://www.baidu.com/");
以下方法可以获取本地文件内容
$data = file_get_contents("1.txt");
8、
session.cookie_httponly = 1 #http only开启,防止xss攻击,禁止客户端获取cookie信息
9、
upload_tmp_dir = /tmp #明确定义upload目录
【window】
upload_tmp_dir = C:\windows\temp
10、
[HOST=www.baidu.com]
open_basedir=/home/wwwroot/www.baidu.com/:/proc/:/tmp/ #限制用户访问的目录
[PATH=/home/wwwroot/www.iamle.com/]
open_basedir=/home/wwwroot/www.baidu.com/:/proc/:/tmp/
【window】
open_basedir = "D:/phpStudy/PHPTutorial/tmp/tmp/;E:/WWW/;C:/WINDOWS/Temp/;"
HOST和PATH 任选一个就行
注意:目录最后一定要加上/. 比如你写/tmp,你的站点同时存在/tmp123等等以/tmp开头的目
录,那么黑客也可以访问到这些目录,另外, php5.3以上支持这个写法,5.2不支持。
关于open_basedir的其他地方
#在php-fpm.conf对应的pool池中行尾配置
php_admin_value[open_basedir]=/home/wwwroot/:/proc/:/tmp/
#在nginx fastcgi fastcgi_param配置
#这里用$document_root是一种取巧的方法,也可以设置绝对路径
# set php open_basedir
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
二、php用户只读
目录权限为755,文件权限为644,上传目录777
三、上传分离
将文件上传到远程服务器,例如nfs等。即使有上传漏洞,那么文件也被传到了静态服务器上,木马等文件根本无法执行