PHP安全基础–生产环境配置推荐
生产环境php.ini推荐配置
; 基础设置
; 关闭错误输出
display_erros = Off
; 错误日志输出到指定位置
error_log = /var/log/error.log
; 显示除通知和编码标准警告之外的所有错误。
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; 关闭php版本号在http头中的显示
expose_php = Off
; 限制php访问的文件系统位置;如果设置的是一个指定目录,则需要在最后加上 '/',否则会被认为是目录的前缀
open_basedir = /home/www/
; 禁用远程文件访问
allow_url_fopen = Off
; 禁用远程文件包含
allow_url_include = Off
; 禁用魔术引号
magic_quotes_gpc = Off
; 禁用危险函数 危险函数 参考附录中的危险函数
disable_functions = phpinfo,eval
; cookie安全
; 开启httponly 让Cookie在浏览器中不可见,浏览器脚本语言(如JavaScript)无法访问它
session.cookie_httponly = 1
; 如果开启了ssl 则设置此选项,只有https下请求才会携带cookies
session.cookie_secure = 1
代码安全
会话相关
setcookie($name, $value, $expire, $path, $domain, $secure, $httponly);
php版本
declare(strict_types=1);
random_int(100, 900);
bin2hex(random_bytes(10));
附录
PHP中的危险函数
函数名 | 函数功能 | 危害 |
---|
chgrp() | 改变文件或目录所属用户组 | 高 |
chown() | 改变文件或目录的所有者 | 高 |
chroot() | 改变当前PHP进程的工作根目录,仅支持linux且cli模式 | 高 |
dl() | 在PHP运行过程中,加载一个PHP外部模块 | 高 |
exec() | 允许执行一个外部程序(Unix Shell 或 CMD命令等) | 高 |
ini_alter() | init_set()别名 | 高 |
ini_restore() | 将PHP环境配置参数恢复为初始值 | 高 |
ini_set() | 修改、设置PHP环境配置参数 | 高 |
passthru() | 允许执行一个外部程序并回显输出,类似exec() | 高 |
pfsockopen() | 建立一个Internet或UNIX域的socket持久连接 | 高 |
phpinfo() | 输出PHP环境信息、扩展、web环境信息等 | 高 |
popen() | 可通过popen()参数传递命令,并对popen()打开的文件进行执行 | 高 |
proc_get_status() | 获取是使用proc_open()所打开进程的信息 | 高 |
proc_open() | 执行一个命令并打开文件指针用于读取及写入 | 高 |
readlink() | 返回符号连接指向的目标文件内容 | 中 |
scandir() | 列出指定路径中的文件和目录 | 中 |
shell_exec() | 通过shell执行命令,并将执行结果作为字符串返回 | 高 |
stream_socket_server() | 建立一个Internet或UNIX服务器连接 | 中 |
symlink() | 对已有的target建立一个名为link的符号连接 | 高 |
syslog() | 调用UNIX系统层syslog()函数 | 中 |
system() | 允许执行一个外部程序并回显输出,类似passthru() | 高 |