跳到内容

PHP 配置备忘单

简介

本页面旨在帮助配置 PHP 及其运行的 Web 服务器,使其达到非常安全的级别。

您将找到关于 php.ini 文件的正确设置信息,以及配置 Apache、Nginx 和 Caddy Web 服务器的说明。

有关 PHP 代码库的一般安全性,请参考以下两份优秀的指南:

PHP 配置和部署

php.ini

以下某些设置需要根据您的系统进行调整,特别是 session.save_pathsession.cookie_path(例如 /var/www/mysite)和 session.cookie_domain(例如 ExampleSite.com)。

您应该运行 受支持的 PHP 版本(截至本文撰写时,8.1 是 PHP 获得安全支持的最老版本,尽管分发商通常提供扩展支持)。请查阅 PHP 手册中关于 核心 php.ini 指令 的内容,以获取 php.ini 配置文件中每个值的完整参考。

您可以在此处找到一份即用型 php.ini 文件,其中包含以下值。

PHP 错误处理

expose_php              = Off
error_reporting         = E_ALL
display_errors          = Off
display_startup_errors  = Off
log_errors              = On
error_log               = /valid_path/PHP-logs/php_error.log
ignore_repeated_errors  = Off

请记住,在生产服务器上需要将 display_errors 设置为 Off,并且经常查看日志是个好习惯。

PHP 通用设置

doc_root                = /path/DocumentRoot/PHP-scripts/
open_basedir            = /path/DocumentRoot/PHP-scripts/
include_path            = /path/PHP-pear/
extension_dir           = /path/PHP-extensions/
mime_magic.magicfile    = /path/PHP-magic.mime
allow_url_fopen         = Off
allow_url_include       = Off
variables_order         = "GPCS"
allow_webdav_methods    = Off
session.gc_maxlifetime  = 600

allow_url_* 可防止 LFI 轻易升级为 RFI

PHP 文件上传处理

file_uploads            = On
upload_tmp_dir          = /path/PHP-uploads/
upload_max_filesize     = 2M
max_file_uploads        = 2

如果您的应用程序不使用文件上传,例如用户唯一输入/上传的数据是无需任何文档附件的表单,则应将 file_uploads 设置为 Off

PHP 可执行文件处理

enable_dl               = Off
disable_functions       = system, exec, shell_exec, passthru, phpinfo, show_source, highlight_file, popen, proc_open, fopen_with_path, dbmopen, dbase_open, putenv, move_uploaded_file, chdir, mkdir, rmdir, chmod, rename, filepro, filepro_rowcount, filepro_retrieve, posix_mkfifo
disable_classes         =

这些是危险的 PHP 函数。您应该禁用所有未使用的函数。

PHP 会话处理

会话设置是配置中最重要的值之一。将 session.name 更改为新名称是一个好习惯。

 session.save_path                = /path/PHP-session/
 session.name                     = myPHPSESSID
 session.auto_start               = Off
 session.use_trans_sid            = 0
 session.cookie_domain            = full.qualified.domain.name
 #session.cookie_path             = /application/path/
 session.use_strict_mode          = 1
 session.use_cookies              = 1
 session.use_only_cookies         = 1
 session.cookie_lifetime          = 14400 # 4 hours
 session.cookie_secure            = 1
 session.cookie_httponly          = 1
 session.cookie_samesite          = Strict
 session.cache_expire             = 30
 session.sid_length               = 256
 session.sid_bits_per_character   = 6

一些更偏执的安全检查

session.referer_check   = /application/path
memory_limit            = 50M
post_max_size           = 20M
max_execution_time      = 60
report_memleaks         = On
html_errors             = Off
zend.exception_ignore_args = On

Snuffleupagus

Snuffleupagus 是适用于 PHP 7 及更高版本的 Suhosin 的精神继承者,具有 现代特性。它被认为是稳定的,可以在生产环境中使用。