PHP安全配置详细说明


Posted in PHP onSeptember 26, 2011

【 安全模式 】

PHP的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的PHP开放的Web服务器上。当一个Web服务器上运行的PHP打开了安全模式,那么一些函数将被完全的禁止,并且会限制一些可用的功能。

[ 使用安全模式来强制限制 ]

在安全模式下,一些尝试访问文件系统的函数功能将被限制。运行Web服务器用户ID,如果想要操作某个文件,则必须拥有该文件读取或者写入的访问权限,实现这个限制功能对于PHP来说是没有问题的。

在 安全模式开启的时候,尝试读取或者写入一个本地文件的时候,PHP将检查当前访问用户是否是该目标文件的所有者。如果不是所有者,则该操作会被禁止。(写 入权限:在较低级别的文件访问权限下,可能会允许读取或者写入系统操作系统的文件,通过PHP的安全模式实现了防止你操作另外一个用户文件的操作。当然, 一个Web服务器可能能够访问一个具有全局写入权限的任意文件。)

当安全模式打开的时候,以下函数列表的功能将会受到限制:

chdir , move_uploaded_file, chgrp, parse_ini_file, chown, rmdir, copy, rename, fopen, require, highlight_file, show_source, include, symlink, link, touch, mkdir, unlink

同样的,一些PHP扩展中的函数也将会受到影响。(加载模块:在安全模式下dl函数将被禁止,如果要加载扩展的话,只能修改php.ini中的扩展选项,在PHP启动的时候加载)

在PHP安全模式打开的时候,需要执行操作系统程序的时候,必须是在safe_mode_exec_dir选项指定目录的程序,否则执行将失败。即使允许执行,那么也会自动的传递给escapeshellcmd函数进行过滤。

以下执行命令的函数列表将会受到影响:

exec, shell_exec, passthru, system, popen

另外,背部标记操作符(`)也将被关闭。

当运行在安全模式下,虽然不会引起错误,但是 putenv 函数将无效。同样的,其他一些尝试改变PHP环境变量的函数set_time_limit, set_include_path 也将被忽略。

[ 打开安全模式 ]

打开或者关闭PHP的安全模式是利用php.ini中的safe_mode选项。如果要激活安全模式给当前所有共享Web服务器的用户,只要设置配置选项为:safe_mode = On当函数在访问文件系统的时候将进行文件所有者的检查。缺省情况下,会检查该文件所有者的用户ID,当你能够修改文件所有者的组ID(GID)为 safe_mode_gid 选项所指定的。如 果你有一个共享库文件在你的系统上,当你碰到需要include或require的时候,那么你可以使用 safe_mode_include_dir 选项来设置你的路径,保证你的代码正常工作。(包含路径: 如果你想要使用 safe_mode_include_dir 选项包含更多的包含路径,那么你可以象 include_path 选项一样,在Unix/Linux系统下使用冒号进行分割,在Windows下使用分号进行分割)比如你想要在安全模式下包含 /usr/local/include/php 下的文件,那么你可以设置选项为:safe_mode_include_dir = /usr/local/include/php如果你的包含的文件是需要执行的,那么你可以设置 safe_mode_exec_dir 选项。比如你需要 /usr/local/php-bin 路径下的文件是可以执行的,那么可以设置选项为:safe_mode_exec_dir = /usr/local/php-bin(可执行:如果你执行的程序在 /usr/bin 目录下,那么你可以把这些的二进制文件,连接到你指定选项下能够执行的路径)如果你想设置某些环境变量,那么可以使用 safe_mode_allowed_env_vars 选项。这个选项的值是一个环境变量的前缀,缺省是允许 PHP_ 开头的环境变量,如果你想要改变,可以设置该选项的值,多个环境变量前缀之间使用逗号进行分割。比如下面允许时区的环境变量 TZ ,那么修改该选项的值为:safe_mode_allowed_env_vars = PHP_,TZ【 其他的安全特征 】除了安全模式以外,PHP还提供了许多其他许多特征来保证PHP的安全。

[ 隐藏PHP ]

你能够在php.ini里使用 expose_php 选项来防止Web服务器泄露PHP的报告信息。如下:expose_php = On利用整个设置,你能够阻碍一些来自自动脚本针对Web服务器的攻击。通常情况下,HTTP的头信息里面包含了如下信息:Server: Apache/1.3.33 (Unix) PHP/5.0.3 mod_ssl/2.8.16

OpenSSL/0.9.7c在 expose_php 选项打开以后,PHP的版本信息将不包含在上面的头信息里。当然,用户访问网站的时候同样能够看到 .php 的文件扩展名。如果你想整个的使用不同的文件扩展名,你需要在 httpd.conf 中找到如下这行:AddType application/x-httpd .php你就可以修改 .php 为任何你喜欢的文件扩展名。你能够指定任意多个的文件扩展名,中间使用空格进行分割。如果你想在服务器端使用PHP来解析 .html 和 .htm 文件的时候,那么你设置选项如下:AddType application/x-httpd .html .htm(解析HTML:配置你的Web服务器使用PHP去解析所有的HTML文件,但是如果非服务器端代码也需要PHP去解析,会影响服务器的性能。静态页面你可以使用不同的扩展名,这样能够消除对PHP脚本引擎的依赖,增强性能。)

[ 文件系统安全 ]

安全模式限制了脚本所有者只能访问属于自己的文件,但是你可以使用 open_basedir 选现来指定一个你必须访问的目录。如果你指定了一个目录,PHP将拒绝访问除了该目录和该目录子目录的其他目录。open_basedir 选项能够工作在安全模式之外。限制文件系统只能访问 /tmp 目录,那么设置选项为:open_basedir = /tmp[ 函数访问控制 ]你能够在 disable_functions 选项中使用逗号分割来设定函数名,那么这些函数将在PHP脚本中被关闭。这个设置能够工作在安全模式之外。disable_functions = dl当然,同样的你能够使用 disable_classes 选项来关闭对一些类的访问。

[ 数据库安全 ]

假设你的PHP脚本中包含一个基于表单值来执行的Mysql查询:$sql = “UPDATE mytable SET col1 = ” .

PHP 相关文章推荐
Dedecms常用函数解析
Feb 01 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
win10环境PHP 7 安装配置【教程】
May 09 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
使用PHP遍历文件夹与子目录的函数代码
Sep 26 #PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 #PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 #PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 #PHP
PHP将DateTime对象转化为友好时间显示的实现代码
Sep 20 #PHP
php方法调用模式与函数调用模式简例
Sep 20 #PHP
php若干单维数组遍历方法的比较
Sep 20 #PHP
You might like
PHP 中的一些经验积累
2006/10/09 PHP
php实现文件下载实例分享
2014/06/02 PHP
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
python调用API实现智能回复机器人
2018/04/10 Python
python 实现敏感词过滤的方法
2019/01/21 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
我的中国梦演讲稿400字
2014/08/19 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
个人存款证明书
2014/10/18 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
大国崛起英国观后感
2015/06/02 职场文书
商务信函英语问候语
2015/11/10 职场文书