PHP之php.ini参数详解.
官方说明:http://php.net/manual/zh/ini.list.php
需要优化部分 |
说明 |
safe_mode = Off 改为On |
在 PHP 5.4.0 后移除该选项,能够控制php中的函数执行 和下文的disable_functions 一样可以限制函数执行, |
safe_mode_gid = Off |
在 PHP 5.4.0 后移除该选项,用户组安全 |
disable_functions = |
关闭危险函数 passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,pr oc_open,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink, popepassthru, stream_socket_server,fsocket,popen,phpinfo |
expose_php = On 改为Off |
关闭php版本信息在http头中的泄露,On代表显示 Off代表不显示 |
register_argc_argv = Off |
在PHP中提交的变量,包括使用POST或者GET提交的变量,都将会自动注册为全量,能够直接访问,对服务器非常不安全,不能把它注册为全局变量,改参数设置为Off 改指令受request_order 影响 |
request_order = "GP" request_order = "CGP" |
织梦程序会要求为CGP GP可以满足就不需要改为CGP |
magic_quotes_gpc =Off 改为On |
在 PHP 5.4.0 后移除该选项,有效防止SQL注入, |
display_errors = On 改为Off |
错误信息控制,一般在php没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前路径信息或者SQL语句等信息,建议禁止错误提示 |
error_reporting = E_ALL & ~E_NOTICE error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT |
默认: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 开发建议 E_ALL 生产建议: |
官方说明: http://php.net/manual/zh/errorfunc.configuration.php#ini.log-errors-max-len 未做实验;需要验证 log_errors = On error_log = /server/logs/php_error.log |
display_errors = Off后,记录错误信息,需要设置 1,修改php-fpm.conf中的配置,如果没有请增加: 复制代码 代码如下: [global] error_log = log/php_error_log [www] catch_workers_output = yes 2.修改php.ini中配置,没有则增加: 复制代码 代码如下: log_errors = On error_log = "/usr/local/php/var/log/php_error_log" error_reporting=E_ALL&~E_NOTICE 3.重启php-fpm 当PHP执行错误时就能看到错误日志在”/usr/local/lnmp/php/var/log/php_error_log”中了 |
max_execution_time = 100 |
每个脚本运行的最长时间(需要注意的是php-fpm.conf中也有,此处不生效) 未做实验验证: 最好和php-fpm.conf设置的一样 request_terminate_timeout = 100 可用有助于组织劣质脚本占用服务器资源 仅影响脚本本身的运行时间 system() sleep()函数的使用,数据库查询,文件上传,都不包含之内 |
max_input_time = 60 |
每个脚本等待输入数据最长时间 解析输入数据(post,get,upload)的最大准许时间(秒) 建议60秒 -1表示不显示 |
memory_limit = 128M |
每个脚本使用的最大内存 编译时必须使用—enable-memory-limit配置 -1表示不限制 设置以后 memory_get_usage()函数变为可用 |
file_uploads = On upload_max_filesize = 50M |
上传和下载文件的最大许可大小,一些图片论坛需要 调整更大的值 |
建议如下配置:
也有书中两个都是Off |
官方说明: 本选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用 ftp 和 http 协议来访问远程文件,一些扩展库例如 zlib 可能会注册更多的封装协议 为了防止WEB变种攻击PHP 禁用allow_url_fopen功能。引用allow_url_fopen功能在客户站点里运行恶意程序
如果配置为On的话 则文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞可以直接执行任意命令。在实际渗透攻击过程中,攻击者可以在自己的Web服务器上放一个可执行的恶意文件,通过目标网站存在的远程文件包含漏洞来加载文件,从而实现执行任意命令的目的 |
post_max_size = 8M |
限制通过POST方法可以接受的信息最大量 |
设为1 有解析漏洞 设为0 会影响PATH_INFO伪静态 网上议论纷纷,奈何我水平有限 于是贴出两种方案 若碰上可改之 也有人说漏洞已经不存在了,不知道 当然最安全的办法就是上传云存储 |
方法一: 如果设置为0的解决方案: 将 Nginx 的 PHP 段改成如下形式 location ~ [^/]\.php(/|$) { #fastcgi_pass remote_php_ip:9000; fastcgi_split_path_info ^(.+?.php)(/.*)$; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; } 添加 fastcgi_split_path_info ^(.+?.php)(/.*)$; 后即可由 Nginx 设置 PATH_INFO 值 |
方法二: location ~ [^/]\.php(/|$){ try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi-55.sock; fastcgi_index index.php; include fastcgi.conf; include pathinfo.conf; } pathinfo.conf内容为: set $real_script_name $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info;
|
|
default_socket_timeout = 60 |
Socket超时时间 |
max_file_uploads = 20 |
允许同时上传文件的最大数量 |
short_open_tag = On |
短标签支持 |
asp_tags = Off |
ASP标签支持 |
|