6
回答
php 安全模式废弃了怎么办
终于搞明白,存储TCO原来是这样算的>>>   
服务器环境一直依赖safe_mode 安全模式,但是在PHP5.4中却废弃了安全模式,那么怎么保证服务器运行的安全呢?
PHP
举报
旭日升
发帖于4年前 6回/332阅
共有6个答案 最后回答: 4年前
PHP safe_mode 将检查当前脚本的拥有者是否和被操作的文件的拥有者相同。
相同则允许操作,不同则拒绝操作。

开启安全模式会降低PHP的执行效率。

现在更好的选择是使用open_basedir,限制PHP只能操作指定目录下的文件。

假设你以Nginx/PHP-FPM方式运行PHP,你可以在php.ini中这样配置:

[PATH=/srv/www/example.com/public_html]
session.save_path=/srv/www/example.com/sessions/
upload_tmp_dir=/srv/www/example.com/uploads/ 
open_basedir="/srv/www/example.com/public_html/:/tmp/:/srv/www/example.com/sessions/:/srv/www/example.com/uploads/"

这里我为 example.com独立设置了会话保存目录和文件上传临时目录,所以open_basedir也应该加入这两个路径,否则example.com下的PHP将无法操作这些文件。

--- 共有 2 条评论 ---
eechen回复 @旭日升 : open_basedir配置在PHP启动时就加载到内存了,PHP是可预知的,PHP只要进行判断就好。而safe_mode中PHP并不知道要打开的文件的所有者,所以首先还要获取文件所有者,然后进行判断。当然open_basedir同样会牺牲一点性能,但比safe_mode小得多。 4年前 回复
旭日升open_basedir每次都在执行文件的时候检查是否在安全目录内,这样也不是对I/O操作有性能瓶颈吗? 4年前 回复

引用来自“eechen”的答案

PHP safe_mode 将检查当前脚本的拥有者是否和被操作的文件的拥有者相同。
相同则允许操作,不同则拒绝操作。

开启安全模式会降低PHP的执行效率。

现在更好的选择是使用open_basedir,限制PHP只能操作指定目录下的文件。

假设你以Nginx/PHP-FPM方式运行PHP,你可以在php.ini中这样配置:

[PATH=/srv/www/example.com/public_html]
session.save_path=/srv/www/example.com/sessions/
upload_tmp_dir=/srv/www/example.com/uploads/ 
open_basedir="/srv/www/example.com/public_html/:/tmp/:/srv/www/example.com/sessions/:/srv/www/example.com/uploads/"

这里我为 example.com独立设置了会话保存目录和文件上传临时目录,所以open_basedir也应该加入这两个路径,否则example.com下的PHP将无法操作这些文件。

注意,如果PHP使用shell_exec调用系统命令,这些系统命令的执行并不受制于open_basedir,因此一般情况下还要禁用一些“危险”的PHP函数,比如:
disable_functions = passthru,exec,system,shell_exec,chroot,chgrp,chown,proc_open,proc_get_status,ini_alter,ini_restore,ini_set,dl,pfsockopen,symlink,popen,putenv

更多安全设置,可以参考阿里云帮助中心:
http://help.aliyun.com/manual?helpId=87

顶部