mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-16 00:48:54 +00:00
Quick and dirty xml-ation of the safe-mode sheet by Rasmus.
Doesn't build because of FAQ :( git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@51111 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
parent
dbffd3f3ab
commit
b7b1757493
1 changed files with 85 additions and 0 deletions
85
features/safe-mode.xml
Normal file
85
features/safe-mode.xml
Normal file
|
@ -0,0 +1,85 @@
|
|||
<chapter id="features.safe-mode">
|
||||
<title>Safe mode</title>
|
||||
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<para>
|
||||
The configuration directives that control safe mode are:
|
||||
<programlisting role="ini">
|
||||
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 =
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
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:
|
||||
<computeroutput>
|
||||
-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
|
||||
</computeroutput>
|
||||
Running this script.php
|
||||
<programlisting role="php">
|
||||
<?php
|
||||
readfile('/etc/passwd');
|
||||
?>
|
||||
</programlisting>
|
||||
results in this error when safe mode is enabled:
|
||||
<computeroutput>
|
||||
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
|
||||
</computeroutput>
|
||||
</para>
|
||||
<para>
|
||||
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.ini example):
|
||||
<programlisting role="ini">
|
||||
<Directory /docroot>
|
||||
php_admin_value open_basedir /docroot
|
||||
</Directory>
|
||||
</programlisting>
|
||||
If you run the same script.php with this open_basedir setting then this is
|
||||
the result:
|
||||
<computeroutput>
|
||||
Warning: open_basedir restriction in effect. File is in wrong directory in
|
||||
/docroot/script.php on line 2
|
||||
</computeroutput>
|
||||
</para>
|
||||
<para>
|
||||
You can also disable individual functions. If we add this to our php.ini
|
||||
file:
|
||||
<programlisting role="ini">
|
||||
disable_functions readfile,system
|
||||
</programlisting>
|
||||
Then we get this output:
|
||||
<computeroutput>
|
||||
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2
|
||||
</computeroutput>
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
Loading…
Reference in a new issue