在window中phpStudy的PHP环境中限制每个站点的目录范围,防止跨站目录浏览。
我在windows xp下用phpstudy运行了一个网站。一早就知道php中能跨站目录浏览,能访问网站所在的盘符的所有目录文件,能跳出网站安装目录随意浏览其他文件。因为phpstudy是默认能访问所有网站所在盘符的目录与文件的,对此需要修改一下php.ini中的参数。这个相对于用windows的服务器环境来说尤为严重。为了保证网站所在盘符的目录文件安全。
在网络上寻找了很久,都没有相对应于phpstudy的这个跨站目录文件浏览的对应设置,参考了"nginx+php 限制每个站点的目录范围,防止跨站"这样的设置。
以下操作:
phpStudy软件界面中打开:>其他选项菜单>打开配置文件>php.ini>
修改第299行的“;open_basedir = ”为:“open_basedir = D:\phpStudy\WWW;”
注意:
将前面的分号去掉,等号后面加上你的phpstudy的安装路径下的网站根目录绝对路径即可
最后回到phpstudy软件,点击重启。至此,在windows xp 下的phpstudy设置防跨站目录浏览设置完成。
其实这个是个很简单的问题,只不过对于我这样的菜鸟级别的人,就有点要记录的必要了。呵呵。
---------------------最后附上nginx+php下的设置------------------
1.在php脚本中可以访问服务器上任何目录。
2.php.ini中的open_basedir参数,设置这个参数即可限定php脚本的访问范围。
3.我们针对每个站点,需要php能够访问该站点所在目录以及/tmp/临时目录。
open_basedir=/home/wwwroot/:/tmp/
这样总行了,将php限制在所有站点的父目录,这样至少阻止了php访问服务器上web目录以外的目录。
到了这里,还是有隐患的,只要wwwroot下任意一个站点被拿到webshell,那么其他站点将不能幸免.
4.真正解决方法:
那就是在nginx 每个server下,加上
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/";
重启nginx,成功!你也可以把这行代码放到fastcgi.conf里,前提是你得在server{}中包含它。
至此,nginx + php5.3 是没有问题了。
然后我又在另外一台vps上,环境是php5.2 发现此方法不生效。
返回顶部