php open_basedir设置以及关于安全
2013-10-17 13:01
507 查看
#!/usr/bin/k4shifz
看了军神blog,回来研究的。
open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号"."来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。
举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/other"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。
open_basedir也可以同时设置多个目录,在Windows中用分号分隔目录,在任何其它系统中用冒号分隔目录。当其作用于Apache模块时,父目录中的open_basedir路径自动被继承。
Apache+PHP配置方法有三种:
方法一:在php.ini里配置
open_basedir = .:/tmp/
方法二:在Apache配置的VirtualHost里设置(httpd-vhosts.conf)
php_admin_value open_basedir .:/tmp/
方法三:在Apache配置的Direcotry里设置
php_admin_value open_basedir .:/tmp/
关于三个配置方法的解释:
a、方法二的优先级高于方法一,也就是说方法二会覆盖方法一;方法三的优先级高于方法二,也就是说方法三会覆盖方法二;
b、配置目录里加了“/tmp/”是因为php默认的临时文件(如上传的文件、session等)会放在该目录,所以一般需要添加该目录,否则部分功能将无法使用;
c、配置目录里加了“.”是指运行php文件的当前目录,这样做可以避免每个站点一个一个设置;
d、如果站点还使用了站点目录外的文件,需要单独在对应VirtualHost设置该目录;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这里是我实验的一个例子,设置了两个host,当然一块把Apache设置vitualHost的方法也列出了:
#虚拟主机配置文件
NameVirtualHost *:80
#简单设置模式
<VirtualHost *:80>
ServerAdmin admin@8100.cc
DocumentRoot "C:/AWEB/phproot/test"
ServerName localhost
#ServerAlias www.test.com
ErrorLog "logs/error.log"
CustomLog "logs/access.log" common
</VirtualHost>
#详细设置模式
<VirtualHost *:80>
ServerAdmin admin@cc.cc
DocumentRoot "C:/AWEB/phproot/test2"
ServerName www.test2.com
# php_admin_value open_basedir C:/AWEB/phproot/test2/;C:/windows/temp/ 放在这里也可以
<Directory "C:/AWEB/phproot/test2">
Options Indexes FollowSymLinks
AllowOverride Options FileInfo
Order allow,deny
Allow from all
DirectoryIndex index.htm index.html index.php
php_admin_value open_basedir c:/AWEB/phproot/test2/;C:/windows/temp/
</Directory>
Alias /phpmyadmin "C:/AWEB/phpMyAdmin/"
<Directory "C:/AWEB/phpMyAdmin">
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
ErrorLog "logs/error.log"
CustomLog "logs/access.log" common
</VirtualHost>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后转军神的那两句话:
一、open_basedir中处理文件路径时没有严格考虑目录的存在,这将导致本地包含或者本地文件读取的绕过(合并/aaa/../../导致linux的目录检查作废)。
二、open_basedir的值配置不当,有可能导致目录跨越(配置时忘记目录最后的斜杠 / )。
看了军神blog,回来研究的。
open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号"."来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。
举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/other"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。
open_basedir也可以同时设置多个目录,在Windows中用分号分隔目录,在任何其它系统中用冒号分隔目录。当其作用于Apache模块时,父目录中的open_basedir路径自动被继承。
Apache+PHP配置方法有三种:
方法一:在php.ini里配置
open_basedir = .:/tmp/
方法二:在Apache配置的VirtualHost里设置(httpd-vhosts.conf)
php_admin_value open_basedir .:/tmp/
方法三:在Apache配置的Direcotry里设置
php_admin_value open_basedir .:/tmp/
关于三个配置方法的解释:
a、方法二的优先级高于方法一,也就是说方法二会覆盖方法一;方法三的优先级高于方法二,也就是说方法三会覆盖方法二;
b、配置目录里加了“/tmp/”是因为php默认的临时文件(如上传的文件、session等)会放在该目录,所以一般需要添加该目录,否则部分功能将无法使用;
c、配置目录里加了“.”是指运行php文件的当前目录,这样做可以避免每个站点一个一个设置;
d、如果站点还使用了站点目录外的文件,需要单独在对应VirtualHost设置该目录;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这里是我实验的一个例子,设置了两个host,当然一块把Apache设置vitualHost的方法也列出了:
#虚拟主机配置文件
NameVirtualHost *:80
#简单设置模式
<VirtualHost *:80>
ServerAdmin admin@8100.cc
DocumentRoot "C:/AWEB/phproot/test"
ServerName localhost
#ServerAlias www.test.com
ErrorLog "logs/error.log"
CustomLog "logs/access.log" common
</VirtualHost>
#详细设置模式
<VirtualHost *:80>
ServerAdmin admin@cc.cc
DocumentRoot "C:/AWEB/phproot/test2"
ServerName www.test2.com
# php_admin_value open_basedir C:/AWEB/phproot/test2/;C:/windows/temp/ 放在这里也可以
<Directory "C:/AWEB/phproot/test2">
Options Indexes FollowSymLinks
AllowOverride Options FileInfo
Order allow,deny
Allow from all
DirectoryIndex index.htm index.html index.php
php_admin_value open_basedir c:/AWEB/phproot/test2/;C:/windows/temp/
</Directory>
Alias /phpmyadmin "C:/AWEB/phpMyAdmin/"
<Directory "C:/AWEB/phpMyAdmin">
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
ErrorLog "logs/error.log"
CustomLog "logs/access.log" common
</VirtualHost>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后转军神的那两句话:
一、open_basedir中处理文件路径时没有严格考虑目录的存在,这将导致本地包含或者本地文件读取的绕过(合并/aaa/../../导致linux的目录检查作废)。
二、open_basedir的值配置不当,有可能导致目录跨越(配置时忘记目录最后的斜杠 / )。
相关文章推荐
- php open_basedir设置以及关于安全
- php open_basedir设置以及关于安全
- 推荐的nginx+php(fpm-php fastcgi)open_basedir安全设置
- php的open_basedir设置多个路径
- 共享主机配置php open_basedir提升安全 防止文件被跨站访问
- php open basedir设置防止跨站
- 关于PHP open_basedir
- PHP 配置open_basedir 让各虚拟站点独立运行
- nginx+php使用open_basedir限制站点目录防止跨站
- PHP 配置文件中open_basedir选项作用
- 解决 php 报错 open_basedir restriction in effect
- php-fpm的pool、慢执行日志、open_basedir、进程管理
- PHP 配置文件中open_basedir选项作用
- linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
- PHPExcel 出现open_basedir restriction in effect的解决办法
- PHP 5.2.12 / 5.3.1 safe_mode / open_basedir Bypass
- LNMP架构——open_basedir参数设置
- 12-3 12 php-fpm pool 慢日志 open_basedir 进程
- PHP中open_basedir配置分析
- 51.php-fpm的pool 慢日志 open_basedir 进程管理