副问题[/!--empirenews.page--]
【新品产上线啦】51CTO播客,随时随地,碎片化进修
一、媒介
php因生成支持web应用的开拓,以其简朴易学,开拓服从高而备受喜欢。使其占有了大片的市场。可是php自己的安详题目却一向未曾消停,以及不类型的php代码编写类型,使得web应用裂痕百出。这篇文章从设置文件和代码编写角度出发,总结记录php相干安详。新手上路,向先进致敬。
二、请充实相识你的php
1. 根基信息
留意到以下的文件布局在新版本php可能差异的刊行版中略有差异,就比如在ubuntu18.04中安装php7就和下面的文件布局有较大的不同,以是下面的文件仅仅作为一个apache的架构参考。
- Root:/var/www/html
- 默认Web处事:Apache(可以行使Lighttpd或Nginx取代)
- 默认PHP设置文件:/etc/php.ini
- 默认PHP Extensions
- 设置目次:/etc/php.d/
- PHP安详设置样例文件:/etc/php.d/security.ini(必要行使文本编辑器建设这个文件)
- php 版本: php -v
- 查察当前PHP所编译 : php -m
2. 敏感设置
以下是一些常见的设置举例,更多请查察:
http://php.net/manual/zh/ini.core.php#ini.variables-order。
不在哀求头中泄漏php信息:
- expose_php=Off
不回显php错误(包罗运行错误时和启动时错误),可是举办错误记录:
- play_errors=Off
- display_startup_errors=off
- log_errors=On
- error_log=/var/log/httpd/php_scripts_error.log
文件上传开启与否和最大上传文件限定:
- file_uploads=On
- upload_max_filesize=1M
节制最大post数据:
- post_max_size=1M
留意:到要比upload_max_filesize大,不然后者失效。
封锁长途代码执行:
- allow_url_fopen=Off
- allow_url_include=Off
封锁全局注册变量,不外默认5.x版本的php是off:
- register_globals=off
关于安详模式和粗暴的把戏引号过滤,留意到save_mode模式在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特征完全去除了:
- safe_mode=On
- safe_mode_include_dir = D:/phpstudy/www/include/
- magic_quotes_gpc=Off #假如开启了这个,然后在php应用中行使addslashes()过滤输入会造成双重转义,使得过滤无济于事,碰着这种环境时可以行使函数 get_magic_quotes_gpc() 举办检测。
- magic_quotes_runtime
资源打点防备过度耗损处事器资源:
- max_execution_time = 30
- max_input_time = 30
- memory_limit = 40M
禁用伤害函数:
- disable_functions =
- phpinfo,eval,passthru,assert,exec,system,ini_set,ini_get,get_included_files,
- get_defined_functions,get_defined_constants,get_defined_vars,
- glob,``,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,
- ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,
- symlink,popepassthru,stream_socket_server,fsocket,fsockopen
限定php会见文件体系:
- open_basedir='/var/www/html/';......;......
session生涯路径:
- session.save_path="/var/lib/php/session"
上传文件默认路径:
- upload_tmp_dir="/var/lib/php/upload"
3. 关于伤害函数
非凡标记:
“:反引号运算符在激活了安详模式可能封锁了 shell_exec() 时是无效的,同时与其余某些说话差异,反引号不能在双引号字符串中行使。不然将会看成shell呼吁执行,执行结果等同于shell_exec()。
- 文件操纵:http://php.net/manual/zh/ref.filesystem.php。
- 全局信息,设置等:http://php.net/manual/zh/ref.info.php。
- 措施执行:http://php.net/manual/zh/book.exec.php。
三、不要过度信托php
1. 弱范例
前人之述备矣,仅仅做个汇总。同样还可以参看官网给出的范例表(PHP 范例较量表)。
- 0=='0' //true
- 0 == 'abcdefg' //true
- 1 == '1abcdef' //true
- null==false //true
- 123=='123' //true
-
- //哈希较量
- "0e132456789"=="0e7124511451155" //true
- "0e123456abc"=="0e1dddada" //false
- "0e1abc"=="0" //true
-
- "0x1e240"=="123456" //true
- "0x1e240"==123456 //true
-
- var_dump(intval('2')) //2
- var_dump(intval('3abcd')) //3
- var_dump(intval('abcd')) //0
-
- //恣意两个array,MD5相称
- var_dump(md5($array1)==var_dump($array2)); //true
-
- //case 自转换,以下代码输出i is less than 3 but not negative
- $i ="2abc";
- switch ($i) {
- case 0:
- case 1:
- case 2:
- echo "i is less than 3 but not negative";
- break;
- case 3:
- echo "i is 3";
- }
-
- //in_array的缺陷,array_search
- $array=[0,1,2,'3'];
- var_dump(in_array('abc', $array)); //true
- var_dump(in_array('1bc', $array)); //true
-
- //strcmp在php5.x个版本后有些特征不太同,以是碰着的时辰详细接头
2. 全局注册变量
(编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|