What is PHP Safe Mode ?
PHP SAFE MODE ON/OFF
The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren’t very realistic, many people, especially ISP’s, use safe mode for now.
The configuration directives that control safe mode are:
safe_mode = Off
open_basedir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
When safe_mode is on, PHP checks to see if the owner of the current script matches the owner of the file to be operated on by a file function. For example: -
rw-rw-r– 1 rasmus rasmus 33 Jul 1 19:20 script.php
-rw-r–r– 1 root root 1116 May 26 18:01 /etc/passwd
Running this script.php
<?php
readfile(’/etc/passwd’);
?>
results in this error when safe mode is enabled:
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2
If instead of safe_mode, you set an open_basedir directory then all file operations will be limited to files under the specified directory
For example (Apache httpd.conf example):
<Directory /docroot>
php_admin_value open_basedir /docroot
</Directory>
If you run the same script.php with this open_basedir setting then this is the result:
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2
You can also disable individual functions. Note that the disable_functions directive can not be used outside of the php.ini file which means that you cannot disable functions on a per-virtualhost or per-directory basis in your httpd.conf file.
If we add this to our php.ini file:
disable_functions readfile,system
Then we get this output:
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2