Upload via http e chmod 755 X 777
Olá Pessoal,
É muito comum o webdeveloper deixar pastas de uploads em chmod 777, pois isso facilita na execução do script e torna a nossa vida mais fácil, mas temos que pensar que isso também torna nossa vida mais perigosa.
Veja, a permissão chmod 777 dá acesso a qualquer um a ler/executar/gravar arquivos no seu servidor, o que é extremamente arriscado, uma vez que qualquer hacker principiante sabe usar essa brecha para explorar o deflate, por exemplo, onde ele faz o uploade de um arquivo "arquivo.qualquercoisa" e executa seu script malicioso dentro do seu servidor podendo até mesmo se tornar owner do servidor. Nessa situação o menos pior que ele pode fazer é deletar todo o seu site.
Muito se fala sobre isso nos blogs e posts pela web, mas não encontrei nada prático, o mais comum de se encontrar é "dê permissão 755 que funciona", realmente funciona, mas ninguém abre o macete para fazer funcionar.
Vamos lá, a permissão 755 dá direito de leitura global, mas mantém a execussão e gravação restrita ao gurpo ou autor do documento, sendo que para ser parte do grupo você precisa estar logado no painel de cotrole do servidos, essa opçao não funciona para nossa necessidade, então sobra apenas o autor e nesse caso o autor precisa ser o próprio script que irá fazer os uploads, ou seja a pasta precisa ser criada em ambiente de produção.
Um código simples receptação de upload:
$uploadfile = $uploaddir . basename($_FILES["Filedata"]["name"]);
$file=basename($_FILES['Filedata']['name']);
if (move_uploaded_file($_FILES["Filedata"]["tmp_name"], $uploadfile)) {
echo "Arquivo salvo com sucesso.";
} else {
echo "negativo.$uploaddir";
}
Agora supomos que como eu você tenha criado a sua estrutura de pastas antecipadamente, a pasta e tenha dado permissão 755 para a pasta $uploaddir, seu script receberá um erro de permissão negada, pois ele não faz parte do gurupo (não está logado no painel de controle) e não é o "dono" da pasta (não foi ele quem criou). Nesse ponto, e depois de milhares de testes o que mais ouvi foi "dê permissão 777 mesmo, só vai funcionar assim". Pessoal, é sério, não façam isso!! Se você repararem no contrato que assinaram com seu serviro verão que vocês são responsáveis por qualquer brecha em seu aplicativo, tanto cível quanto penal.
Precisamos então reverter a pasta para a propriedade do script, e isso é bem simples depois que se faz. Basta deletar as pastas via painel de controle e incluir no script uma rotina de verificação antes de fazer o upload.
Somando a Rotina:
if(!is_dir($uploaddir)){mkdir($uploaddir, 0755);}
$uploadfile = $uploaddir . basename($_FILES["Filedata"]["name"]);
$file=basename($_FILES['Filedata']['name']);
if (move_uploaded_file($_FILES["Filedata"]["tmp_name"], $uploadfile)) {
echo "Arquivo salvo com sucesso.";
} else {
echo "negativo.$uploaddir";
}
Pronto!!
Seu script está apto a escrever na pasta destino sempre que necessário e sua pasta fica protegida, mas há um porém, qualquer alteração que você precise fazer na pasta, precisará ser feito via script, já que ele é o único dono da pasta.
Abraço!
Flavio
- Comentar
- 1044 leituras

Excelente!
Cara. Tú matou uma charada que eu tenho procurado resolver a mais de um ano e nunca achei resposta.
Muito obrigado!
Fico feliz em ajudar. Demorei
Fico feliz em ajudar.
Demorei bastante tempo também para chegar a essa solução.
Abraço,
Flavio Ribeiro
Spyder It Management