科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道应用安全php open_basedir设置以及关于安全

php open_basedir设置以及关于安全

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号"."来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。

来源:zdnet整理 2011年6月6日

关键字: Web安全 应用安全

  • 评论
  • 分享微博
  • 分享邮件

  看了军神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.ccDocumentRoot "C:/AWEB/phproot/test"ServerName localhost#ServerAlias www.test.comErrorLog "logs/error.log"CustomLog "logs/access.log" common</VirtualHost>

  #详细设置模式<VirtualHost *:80>

  ServerAdmin admin@cc.ccDocumentRoot "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 FollowSymLinksAllowOverride Options FileInfoOrder allow,denyAllow from allDirectoryIndex index.htm index.html index.phpphp_admin_value open_basedir c:/AWEB/phproot/test2/;C:/windows/temp/</Directory>

  Alias /phpmyadmin "C:/AWEB/phpMyAdmin/"<Directory "C:/AWEB/phpMyAdmin">

  AllowOverride AuthConfigOrder allow,denyAllow from all</Directory>

  ErrorLog "logs/error.log"CustomLog "logs/access.log" common</VirtualHost>

  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------最后转军神的那两句话:

  一、open_basedir中处理文件路径时没有严格考虑目录的存在,这将导致本地包含或者本地文件读取的绕过(合并/aaa/../../导致linux的目录检查作废)。

  二、open_basedir的值配置不当,有可能导致目录跨越(配置时忘记目录最后的斜杠 / )。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章