PHPphp.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

生产建议:

E_ALL & ~E_DEPRECATED & ~E_STRICT

 

官方说明:

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

每个脚本等待输入数据最长时间

解析输入数据(postgetupload)的最大准许时间(秒)

建议60 -1表示不显示

memory_limit = 128M

每个脚本使用的最大内存

编译时必须使用—enable-memory-limit配置

-1表示不限制

设置以后 memory_get_usage()函数变为可用

file_uploads = On                                                  

upload_max_filesize = 50M                

上传和下载文件的最大许可大小,一些图片论坛需要

调整更大的值

 

 

 

建议如下配置:

allow_url_fopen = On                                   

allow_url_include = Off

 

也有书中两个都是Off

官方说明:

本选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用 ftp http 协议来访问远程文件,一些扩展库例如 zlib 可能会注册更多的封装协议

为了防止WEB变种攻击PHP 禁用allow_url_fopen功能。引用allow_url_fopen功能在客户站点里运行恶意程序

 

如果配置为On的话

则文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞可以直接执行任意命令。在实际渗透攻击过程中,攻击者可以在自己的Web服务器上放一个可执行的恶意文件,通过目标网站存在的远程文件包含漏洞来加载文件,从而实现执行任意命令的目的

post_max_size = 8M

限制通过POST方法可以接受的信息最大量

cgi.fix_pathinfo=1

设为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标签支持