Güvenlik ve Güvenli Kip
PHP_INI_* kiplerinin tanımları ve ayrıntılı
açıklamaları için
Yapılandırma ayarlarının yeri bölümüne bakınız.
Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.
-
safe_mode
boolean
-
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
itibariyle ÖNERİLMEMEKTE olup PHP 5.4.0'da tamamen
KALDIRILMIŞTIR.
-
safe_mode_gid
boolean
-
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_dir
string
-
UID
/GID
denetimleri bu dizinde
ve alt dizinlerinde es geçilir. (Dizinin ya tam yolu belirtilmeli ya
da include_path yönergesinde
de belirtilmelidir).
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 farklı
UID
/GID
'e sahip
hiçbir dosya dahil edilmez.
-
safe_mode_exec_dir
string
-
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_vars
string
-
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_vars
string
-
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');
?>
kodunu içeren
betik.php betiği,
-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
ortamında çalıştırılırsa, güvenli kip etkin olduğu takdirde işlem şöyle bir
hatayla sonuçlanır:
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>
Önceki örnekteki
betik.php dosyanızı bu
open_basedir ayarı ile
kullanırsanız şöyle bir sonuç alırsınız:
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
betik.php dosyanızdan şöyle bir sonuç alırsınız:
Warning: readfile() has been disabled for security reasons in
/docroot/betik.php on line 2
Uyarı
Şüphesiz, bu PHP kısıtlamaları çalıştırılabilir dosyalar için geçerli
değildir.