refers to the previuos posting of
bananarama
15-May-2006 10:11
"all file-handling and -management functions are restricted, just in case someones wondering why they're not listed here.
a script can run these functions on files without errors, if the files were created (are owned) by the same UID, the script was created (is owned) by."
.... or if the directory, in which the file is located, has the same UID as the script, which tries to use a file in that directory...
Güvenli kipte yasaklı/kısıtlı işlevler
Güvenli kip ile sınırlanmış işlev listesi hala yanlış veya eksik olabilir.
| İşlev | Kısıtlama |
|---|---|
| dbmopen() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| dbase_open() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| filepro() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| filepro_rowcount() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| filepro_retrieve() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| ifx_* | sql_safe_mode kısıtlamaları, (!= safe mode) |
| ingres_* | sql_safe_mode kısıtlamaları, (!= safe mode) |
| mysql_* | sql_safe_mode kısıtlamaları, (!= safe mode) |
| pg_lo_import() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| posix_mkfifo() | Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| putenv() | safe_mode_protected_env_vars ve safe_mode_allowed_env_vars yönergelerine tabidir. Ayrıca, putenv() işlevine de bakınız. |
| move_uploaded_file() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| chdir() | Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| dl() | Bu işlev, PHP güvenli kipte çalışırken iptal edilir. |
| ter tırnak işleci | Bu işlev, PHP güvenli kipte çalışırken iptal edilir. |
| shell_exec() (ters tırnakların işlevsel eşdeğeri) | Bu işlev, PHP güvenli kipte çalışırken iptal edilir. |
| exec() | Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır. |
| system() | Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır. |
| passthru() | Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır. |
| popen() | Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır. |
| fopen() | Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| mkdir() | Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| rmdir() | Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| rename() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| unlink() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| copy() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin
betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği
çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (kaynak
ve hedef üzerinde) |
| chgrp() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| chown() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| chmod() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Ek olarak, SUID, SGID ve yapışkan bitleri tanımlayamazsınız. |
| touch() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. |
| symlink() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece hedef sınanır) |
| link() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece hedef sınanır) |
| apache_request_headers() | Güvenli kipte, authorization ile başlayan başlıklar (harf büyüklüğüne duyarsız) döndürülmeyecektir. |
| header() | Güvenli kipte, betiğin kullanıcı kimliği WWW-Authenticate başlığının realm kısmına eklenir (HTTP Kimlik doğrulamasında bu başlık etkinse). |
| PHP_AUTH değişkenleri | Güvenli kipte, PHP_AUTH_USER, PHP_AUTH_PW ve AUTH_TYPE değişkenleri $_SERVER içinde bulunmaz. Yine de, bundan bağımsız olarak, USER yerine REMOTE_USER kullanabilirsiniz (bilgi: sadece PHP 4.3.0'dan beri etkindir). |
| highlight_file(), show_source() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece PHP 4.2.1'den beri etkindir) |
| parse_ini_file() | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece PHP 4.2.1'den beri etkindir) |
| set_time_limit() |
safe_mode etkinse etkisizdir.
|
| max_execution_time |
safe_mode etkinse etkisizdir.
|
| mail() | Güvenli kipte, 5. değiştirge iptal edilir. (bilgi: sadece PHP 4.2.3'ten beri etkindir) |
| session_start() | session.save_handler yönergesinde files öntanımlı ise betiğin sahibi session.save_path dizininin sahibi ile aynı olmak zorundadır. |
| Tüm dosya sistemi ve akım işlevleri. | Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (safe_mode_include_dir php.ini yönergesine bakınız.) |
tschmieder at bitworks dot de ¶
5 years ago
Stephen Dewey ¶
3 years ago
curl_setopt() will not allow you to activate CURLOPT_FOLLOWLOCATION when in safe mode.
bananarama ¶
7 years ago
all file-handling and -management functions are restricted, just in case someones wondering why they're not listed here.
a script can run these functions on files without errors, if the files were created (are owned) by the same UID, the script was created (is owned) by.
example:
you upload a script, it is owned by UID 720. you upload a picture, it is owned by UID 720. the script creates a thumbnail of the picture. the thumb is owned by UID 30 (the server/apache). this makes it impossible (?) to run a gallery script, which checks for newly uploaded pictures in order to create and display thumbs of them if you want to check, if a thumbnail already exists. the script would be owned by UID 720, the thumb by UID 30.
you could upload a script which creates a file (e.g. from a text file) with .php ending. this script would be owned by UID 30 and could access the thumbs, but it couldnt read the upload pictures.
<?
$data = fread(fopen("test.txt", "r"), filesize("test.txt"));
$file = "test.php";
if (!$file_handle = fopen($file,"a")) { echo "Cannot open file"; }
if (!fwrite($file_handle, $data)) { echo "Cannot write to file"; }
fclose($file_handle);
chmod("test.php", 0777);
?>
zauker ¶
7 years ago
The SAFE_MODE handling of glob() needs a checkup for security reasons.
In short - always with SAFE_MODE on:
1) glob() can still fetch all filenames in a directory not owned by the
same UID as the user, if just the first file in the directory (or more
specific, the glob-pattern) happens to be owned by the same user as the
PHP-script.
2a) No warning is raised if glob is used on another owner's directory
and there is no match.
2b) In those cases where SAFE_MODE correctly prohibits glob() from
fetching a list of files, the warning still discloses the first
filename.
Solution: glob() in SAFE_MODE should be restricted in the same way as
opendir() is
see the link http://bugs.php.net/bug.php?id=28932
