php安全配置记录和常见错误梳理(总结)

2019-05-01 20:36:15王冬梅

php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项

曾经遇到的问题: 
在网站后台上传图片的时候出现一个非常怪的问题,有时候表单提交可以获取到值,有时候就获取不到了,连普通的字段都获取不到了,苦思冥想还没解决,最后问了师傅, 
师傅看了说挺奇怪的,然后问我 upload_max_filesize的值改了吗,我说改了啊,师傅也解决不了了。过了一会师傅问 post_max_size改了吗,我说那个和上传没关系吧, 
师傅没理我,我还是照着自己的想法继续测试,弄了半天还是不行,最后试了师傅提的意见,成功了,原来上传是和 post_max_size有关系的。 
  
问题总结 : 
php.ini配置文件中的默认文件上传大小为 2M,默认upload_max_filesize = 2M ,即文件上传的大小为 2M,如果你想上传超过8M的文件,比如 20M, 
  
必须设定 upload_max_filesize = 20M。但是光设置upload_max_filesize = 20M还是无法实现大文件的上传功能,你必须修改 php.ini配置文件中的post_max_size选项, 
其代表允许 POST的数据最大字节长度,默认为 8M。如果POST 数据超出限制,那么 $_POST和$_FILES 将会为空。要上传大文件, 
你必须设定该选项值大于 upload_max_filesize指令的值,我一般设定upload_max_filesize和 post_max_size值相等。 
另外如果启用了内存限制,那么该值应当小于 memory_limit选项的值。 
  
文件上传的其他注意事项 : 
在上传大文件时,你会有上传速度慢的感觉,当超过一定的时间,会报脚本执行超过 30秒的错误,这是因为在php.ini配置文件中 max_execution_time 配置选项在作怪, 
其表示每个脚本最大允许执行时间 (秒) ,0 表示没有限制。你可以适当调整 max_execution_time的值,不推荐设定为0。 
******************************************************************************************************** 
解释: 
具体可查看 PHP手册 中的 〔php.ini 核心配置选项说明〕 
upload_max_filesize 所上传的文件的最大大小。 
post_max_size    设定 POST 数据所允许的最大大小。 
memory_limit    设定了一个脚本所能够申请到的最大内存字节数。 
 
一般来说:memory_limit > post_max_size > upload_max_filesize 
  
upload_max_filesize是限制本次上传的最大值 
post_max_size是post数据的最大值, 通过POST提交数据的最大值 
一般我们在php中用的是POST方式上传

php.ini中记录PHP错误日志的参数:display_errors与log_errors的区别

1)display_errors 
错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。 
 
display_errors = On 
开启状态下,若出现错误,则报错,出现错误提示。即显示所有错误信息。 
 
dispaly_errors = Off 
关闭状态下,若出现错误,则提示:服务器错误,但是不会出现错误提示。即关闭所有错误信息 
 
2)log_errors 
在正式环境下用这个就行了,把错误信息记录在日志里。正好可以关闭错误回显。 
 
log_errors = On  //注意,log_errors设置为On后,那么dispaly_errors就要设置为Off,这两个不能同时打开。 
 
error_log = /Data/logs/php/error.log  //注意,log_errors设置为On时,必须要设置error_log的日志文件路径,并且这个日志文件要能有权限正常写入。 
 
也就是说log_errors = On时,必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors 这个指定的Off失效,错误信息还是打印了出来。 
 
对于PHP开发人员来说,一旦项目上线后,第一件事就是应该将display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。 
 
--------------------------------------------------- 
一般说来: 
 
测试环境下的php.ini中的错误日志设置:        
error_reporting = E_ALL  
display_errors = On  
html_errors = On  
log_errors = Off  
 
正式环境下的php.ini中的错误日志设置: 
error_reporting = E_ALL &~ E_NOTICE &~ E_WARNING    //注意这个设置,记得有一次因为这个设置有误,导致了线上一个业务访问出现了nginx 500报错!这个导致了php框架报错!  
display_errors = Off  
log_errors = On  
html_errors = Off  
error_log = /Data/logs/php/error.log 
ignore_repeated_errors = On  
ignore_repeated_source = On  
 
简单讲解下各个配置的意义: 
error_reporting :设置报告哪些错误  
display_errors :设置错误是否作为输出的一部分显示  
html_errors :设置错误信息是否采用html格式  
log_errors :设置是否记录错误信息  
error_log :设置错误信息记录的文件  
ignore_repeated_errors :是否在同一行中重复显示一样的错误信息  
ignore_repeated_source : 是否重复显示来自同个文件同行代码的错误								 
			 
相关文章 大家在看