Nome | Padrão | Modificável | Changelog |
---|---|---|---|
safe_mode | "0" | PHP_INI_SYSTEM | Removido no PHP 5.4.0. |
safe_mode_gid | "0" | PHP_INI_SYSTEM | Removido no PHP 5.4.0. |
safe_mode_include_dir | NULL | PHP_INI_SYSTEM | Removido no PHP 5.4.0. |
safe_mode_exec_dir | "" | PHP_INI_SYSTEM | Removido no PHP 5.4.0. |
safe_mode_allowed_env_vars | "PHP_" | PHP_INI_SYSTEM | Removido no PHP 5.4.0. |
safe_mode_protected_env_vars | "LD_LIBRARY_PATH" | PHP_INI_SYSTEM | Removido no PHP 5.4.0. |
Uma rápida explicação das diretivas de configuração.
safe_mode
boolean
Independente se o "safe mode" estiver habilitado. Se o PHP for compilado com --enable-safe-mode o padrão sempre será On (habilitado), caso contrário, Off (desabilitado).
Esta funcionalidade tornou-se OBSOLETA desde o PHP 5.3.0 e foi REMOVIDA desde o PHP 5.4.0.
safe_mode_gid
boolean
Por padrão, o "safe mode" faz uma comparação UID quando
abre arquivos. Se você preferir ser menos restrito e usar uma comparação por GID,
você pode habilitar o safe_mode_gid.
Usar UID (FALSE
) ou
GID (TRUE
) fara a verificação no acesso aos
arquivos.
safe_mode_include_dir
string
As verificações de UID/GID são ignoradas quando se está incluindo arquivos desse diretório e seus subdiretórios (o diretório tem que estar no include_path ou o caminho completo tem que ser incluído).
Esta diretiva pode receber vírgulas (ou ponto e vírgula para o Windows) para separar múltiplos caminhos do mesmo jeito que a diretiva include_path, em vez de uma única pasta. A restrição especificada é na verdade um prefixo, e não o nome de um diretório. Isso significa que "safe_mode_include_dir = /dir/incl" permite acessar tanto o diretório "/dir/include" quanto o "/dir/incls" se eles existirem. Quando você quiser restringir o acesso apenas a um diretório exclusivo, termine a configuração com uma barra. Exemplo: "safe_mode_include_dir = /dir/incl/" Se o valor da diretiva estiver vazio, nenhum arquivo com UID/GID diferente pode ser incluído.safe_mode_exec_dir
string
Se o PHP utiliza o "safe mode", system() e outras funções que executam programas do sistema podem se recusar a iniciar programas fora desse diretório. Deve-se utilizar a / (barra) como separador de diretórios em todos os ambientes, inclusive no Windows.
safe_mode_allowed_env_vars
string
Configurar algumas varíaveis de ambiente pode causar brechas na segurança. Esta diretiva contém uma lista de prefixos separada por vírgula. No modo seguro, o usuário somente pode alterar varíaveis cujos nomes comecem com os prefixos definidos aqui. Por padrão, os usuários só poderão definir variáveis de ambiente que comecem com PHP_ (e.g. PHP_FOO=BAR).
Nota:
Se esta diretiva estiver vazia, o PHP deixará que o usuário modifique QUALQUER variável de ambiente!
safe_mode_protected_env_vars
string
Está diretiva contém uma lista de varíaveis de ambiente, separadas por vírgula, as quais o usuário final não poderá modificar usando putenv(). Estas variáveis serão protegidas mesmo se o safe_mode_allowed_env_vars estiver configurado para permitir modificá-las.
Veja também: open_basedir, disable_functions, disable_classes, register_globals, display_errors, and log_errors.
Quando safe_mode está habilitado, o PHP verifica se o dono do script atual corresponde ao dono do arquivo a ser usado por uma função de arquivo ou seu diretório. Por exemplo:
-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
<?php
readfile('/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/script.php on line 2
No entanto, podem existir ambientes onde uma verificação UID estrita não é apropriada e uma verificação flexível GID é suficiente. Isso é suportado por meio da chave safe_mode_gid. Definir como On faz a verificação flexível GID, definir como Off (o padrão) faz a verificação UID.
Se em vez do safe_mode, você configurar um diretório open_basedir todas as operações com arquivos ficarão limitadas aos arquivos nessa pasta específica. Por exemplo (Apache httpd.conf):
<Directory /docroot> php_admin_value open_basedir /docroot </Directory>
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2
Você também pode desabilitar funções individuais. Veja que a diretiva disable_functions não pode ser utilizada fora do arquivo php.ini, o que significa que não se pode desabilitar funções por virtualhost ou por diretório através de seu arquivo httpd.conf. Se adicionarmos o seguinte no seu arquivo php.ini:
disable_functions = readfile,system
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2
Claramente estas restrições do PHP não são válidas para binários executados.