The example of setting open_basdir to docroot has the effect of protecting files outside the web site but does NOT PROTECT files INSIDE the website, and could be construed as a suggested use. There is no reason to use open_basedir at all except to protect from misbehaving scripts. If there is a misbehaving script, one would not like it to delete, modify or upload files to the core website either. An example of a safer setting for open_basedir would be /docroot/safedir (or as is used in doc page "Description of core php.ini directives",open_basedir Note, to tighten it from /www/ to /www/tmp).
Güvenlik ve Güvenli Kip
| İsim | Öntanımlı | Değişklik Yeri | Sürüm Bilgisi |
|---|---|---|---|
| safe_mode | "0" | PHP_INI_SYSTEM | Bu kullanımı önerilmeyen özellik gelecekte kesinlikle KALDIRILACAKTIR. |
| safe_mode_gid | "0" | PHP_INI_SYSTEM | PHP 4.1.0'dan beri kullanılabilmektedir. Bu kullanımı önerilmeyen özellik gelecekte kesinlikle KALDIRILACAKTIR. |
| safe_mode_include_dir | NULL | PHP_INI_SYSTEM | PHP 4.1.0'dan beri kullanılabilmektedir. Bu kullanımı önerilmeyen özellik gelecekte kesinlikle KALDIRILACAKTIR. |
| safe_mode_exec_dir | "" | PHP_INI_SYSTEM | Bu kullanımı önerilmeyen özellik gelecekte kesinlikle KALDIRILACAKTIR. |
| safe_mode_allowed_env_vars | "PHP_" | PHP_INI_SYSTEM | Bu kullanımı önerilmeyen özellik gelecekte kesinlikle KALDIRILACAKTIR. |
| safe_mode_protected_env_vars | "LD_LIBRARY_PATH" | PHP_INI_SYSTEM | Bu kullanımı önerilmeyen özellik gelecekte kesinlikle KALDIRILACAKTIR. |
Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.
-
safe_modeboolean -
PHP'nin güvenli kipinin etkin olup olmayacağı. PHP --enable-safe-mode seçeneği ile derlenmişse öntanımlı olarak On (etkin), aksi takdirde Off'tur (etkisiz).
UyarıBu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILMIŞTIR. Bu özelliğe kesinlikle güvenmemelisiniz.
-
safe_mode_gidboolean -
Dosya erişiminde UID (
FALSE) veya GID (TRUE) denetimi yapılıp yapılmayacağı. Öntanımlı olarak güvenli kipte, dosyalar açılırken bir kullanıcı kimliği (UID) karşılaştırması yapılır. Bunu grup kimliğini (GID) denetleterek esnetmek isterseniz safe_mode_gid yönergesine On değerini atayabilirisiniz. -
safe_mode_include_dirstring -
UID/GID denetimleri bu dizinde ve alt dizinlerinde es geçilir. (Dizinin ya tam yolu belirtilmeli ya da include_path yönergesinde de belirtilmelidir).
PHP 4.2.0'dan beri, bu yönergede include_path yönergesinde olduğu gibi, tek bir dizin belirtmek yerine aralarına ikinokta imi (Windows'da noktalı virgül imi) koymak suretiyle birden fazla dizin belirtilebilmektedir. Belirtilen dizinin sonuna bir bölü çizgisi konmadıkça dizin ismi bir önek olarak değerlerdirilir. Örneğin, "safe_mode_include_dir = /dir/incl" ile (varsa) hem "/dir/include" hem de "/dir/incls" dizini belirtilmiş olur. "safe_mode_include_dir = /dir/incl/" durumunda ise sadece /dir/incl dizini belirtilmiş olur. Bu yönergede boş değer belirtilirse PHP 4.2.3 ve PHP 4.3.3'ten itibaren farklı UID/GID'e sahip hiçbir dosya dahil edilmez. Önceki sürümlerde tüm dosyalar dahil edilirdi. -
safe_mode_exec_dirstring -
PHP güvenli kipte kullanılıyorsa system() ve sistem programlarını çalıştırılan diğer işlevlerin bu dizinde olmayan programları çalıştırmasına izin verilmez. Windows dahil tüm ortamlarda dizin ayracı olarak / kullanmanız gerekir.
-
safe_mode_allowed_env_varsstring -
Bazı ortam değişkenlerinin kullanımı güvenlik açığı riski içerir. Bu yönergede virgül ayraçlı bir liste olarak önekler belirtilir. Güvenli kipte, kullanıcıların sadece bu yönergede önekleri belirtilen ortam değişkenlerini değiştirmelerine izin verilir. Kullanıcılar öntanımlı olarak sadece PHP_ ile başlayan ortam değişkenlerinde değişiklik yapabilirler (PHP_FOO=BAR gibi).
Bilginize:
Bu yönergede boş değer belirtilmişse kullanıcıların tüm ortam değişkenlerinde değişiklik yapmalarına izin verilir!
-
safe_mode_protected_env_varsstring -
Bu yönergede, son kullanıcının putenv() kullanarak değiştiremeyeceği ortam değişkenleri virgül ayraçlı bir liste olarak belirtilir. Bu değişkenlerin önekleri safe_mode_allowed_env_vars yönergesinde belirtilmiş olsalar dahi, değiştirilmelerine izin verilmez.
Ayrıca bakınız: open_basedir, disable_functions, disable_classes, register_globals, display_errors ve log_errors.
safe_mode yönergesinin değeri On olduğu takdirde, PHP, betik sahibinin üzerinde çalışılan dosya veya dizin sahibiyle eşleşip eşleşmediğini denetler. Örneğin,
<?php
readfile('/etc/passwd');
?>
-rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 betik.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd
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/betik.php on line 2
Bununla birlikte, kesin UID sınamasının uygun olmadığı, esnek GID sınamasının yeterli olduğu sistemler olabilir. Bu durum, safe_mode_gid yönergesi ile sağlanabilir. Bu yönergeye On değeri vererek esnek GID sınaması, Off değeri (öntanımlıdır) vererek UID sınaması yaptırmak mümkündür.
safe_mode yönergesini etkin kılmak yerine, tüm dosya işlemlerini belli bir dizin altındaki dosyalarla sınırlamak için open_basedir yönergesini kullanabilirsiniz. Örneğin, bunu Apache httpd.conf dosyasında şöyle yapabilirsiniz:
<Directory /docroot> php_admin_value open_basedir /docroot </Directory>
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/betik.php on line 2
Ayrıca, işlevleri tek tek de iptal etmek mümkündür. Ancak, disable_functions yönergesi php.ini dosyası dışında kullanılamaz. Yani, bazı işlevlere erişimi, httpd.conf dosyanızda sanal konak veya dizin temelinde yasaklayamazsınız. php.ini dosyanızda şöyle bir satır varsa:
disable_functions = readfile,system
Warning: readfile() has been disabled for security reasons in /docroot/betik.php on line 2
Şüphesiz, bu PHP kısıtlamaları çalıştırılabilir dosyalar için geçerli değildir.
Theres a failure with open_basedir and per-host configuration
in apache as described in bug #42836: http://bugs.php.net/bug.php?id=42836
I got the same errors on my development windows system and apache 2.2.4 with php 5.3.beta1.
This error (or similar) is shown:
Warning: Unknown: open_basedir restriction in effect. File(...)
is not within the allowed path(s): (� �� �@5�,�)
Fix:
- try slashes at the end of the folder name
or
- put "php_admin_value open_basedir ..." at first of all in the configuration
