Safe mode - Modo seguro no PHP
O Safe mode é uma boa tentativa de se tornar mais seguro ou de simplesmente melhorar o nivel de segurança das aplicações escritas em PHP. Através desse parametro no php.ini o script php pode checar em tempo de execução o owner do arquivo que esta sendo executado, manipulando assim informações do proprio servidor e diretorio.
Nota: Quando o safe-mode está ativo, o PHP verifica se o(s) arquivo(s) e/ou diretório(s) que serão afetados por esta operação tem o mesmo UID (proprietário) do script que está sendo executado.
Isso é um problema crônico principalmente em servidores compartilhado onde os varios usuários executam scripts no apache. Os efeitos colaterais dessa configuração é geralmente nas ferramentas de gravação de arquivos no servidor atraves de uploads, porque normalmente essas ferramentas usa am a função copy() e/ou a função move_upload_file() que fica bloqueada ao UIN do usuario que executa o php. Ou seja se o php.ini não estiver bem configurado ambas poderam não funcionar.
Quando o safe_mode está ligado, o PHP checa se o proprietário do script atual bate com o proprietário do arquivo a ser operado por uma função de arquivo. Por exemplo:
Executando esse script.php:
resulta nesse erro quando o modo seguro estiver habilitado:
No entando, em certos ambientes uma checagem rígida de UID não é apropriada e uma checagem mais leve de GID é suficiente. Isso é suportado através da diretiva safe_mode_gid. Atribuindo a ela o valor On que faz a checagem de GID, mais leve e atribuindo a ela o valor Off (o padrão) faz a checagem UID.
Se, ao invés de safe_mode, você editou um diretório em open_basedir, então todas as operações de arquivos serão limitadas a arquivos no diretório especificado e seus subdiretórios. Por exemplo
(httpd.conf do Apache de exemplo):
Se você rodar o mesmo script.php com essa configuração de open_basedir então esse será o resultado:
Ou seja será gerado um Warning avisando das restrições deste diretorio.
Para desabilitar estas funções individualmente você pode usar a directiva disable_functions.
Ela permite que você desabilite algumas funções por razões de segurança. Nela você passa uma lista de nomes de funções separadas por vírgula. disable_functions não é afetada pela diretiva Safe Mode.
Essa diretiva é configurada no php.ini
Bom espero ter ajudado com algumas informações sobre safe_mode e direcivas de segurança. Qualquer duvida me envie um email estarei a disposição para ajudar. Um abraço a todos e até a proxima.
Leo Genilhu
Fonte
manual do PHP.
http://br2.php.net/manual/
Nota: Quando o safe-mode está ativo, o PHP verifica se o(s) arquivo(s) e/ou diretório(s) que serão afetados por esta operação tem o mesmo UID (proprietário) do script que está sendo executado.
Isso é um problema crônico principalmente em servidores compartilhado onde os varios usuários executam scripts no apache. Os efeitos colaterais dessa configuração é geralmente nas ferramentas de gravação de arquivos no servidor atraves de uploads, porque normalmente essas ferramentas usa am a função copy() e/ou a função move_upload_file() que fica bloqueada ao UIN do usuario que executa o php. Ou seja se o php.ini não estiver bem configurado ambas poderam não funcionar.
Quando o safe_mode está ligado, o PHP checa se o proprietário do script atual bate com o proprietário do arquivo a ser operado por uma função de arquivo. 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
Executando esse script.php:
<?php readfile('/etc/passwd'); ?>
resulta nesse erro quando o modo seguro estiver habilitado:
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 entando, em certos ambientes uma checagem rígida de UID não é apropriada e uma checagem mais leve de GID é suficiente. Isso é suportado através da diretiva safe_mode_gid. Atribuindo a ela o valor On que faz a checagem de GID, mais leve e atribuindo a ela o valor Off (o padrão) faz a checagem UID.
Se, ao invés de safe_mode, você editou um diretório em open_basedir, então todas as operações de arquivos serão limitadas a arquivos no diretório especificado e seus subdiretórios. Por exemplo
(httpd.conf do Apache de exemplo):
<Directory /docroot> php_admin_value open_basedir /docroot </Directory>
Se você rodar o mesmo script.php com essa configuração de open_basedir então esse será o resultado:
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2
Ou seja será gerado um Warning avisando das restrições deste diretorio.
Para desabilitar estas funções individualmente você pode usar a directiva disable_functions.
Ela permite que você desabilite algumas funções por razões de segurança. Nela você passa uma lista de nomes de funções separadas por vírgula. disable_functions não é afetada pela diretiva Safe Mode.
disable_functions readfile,system
Bom espero ter ajudado com algumas informações sobre safe_mode e direcivas de segurança. Qualquer duvida me envie um email estarei a disposição para ajudar. Um abraço a todos e até a proxima.
Leo Genilhu
Fonte
manual do PHP.
http://br2.php.net/manual/
Novo Comentário: