Script de upload de arquivos PHP seguro

Eu fiz esta pergunta duas vezes, acho, mas esta é a primeira vez que me aproximei disso. Estou planejando permitir que os usuários façam upload e baixem seus arquivos (.pdf, .doc, .exl, .ppt, .png, .jpg, .gif).

Essas dicas serão suficientes:

http://blogs.sans.org/appsecstreetfighter/2009/12/28/8-basic-rules-to-implement-secure-file-uploads/

Além disso, existe um script que eu posso utilizar, eu sou novo no php.

uma resposta tardia, mas acho que seu script deve basear-se nisso: http://blog.insicdesigns.com/2009/01/secure-file-upload-in-php-web-applications/

Abrange todos os aspectos da segurança e explica todos os pontos válidos. Eu espero que isso ajude.

EDITAR: O link acima está morto, aqui está uma versão em cache desse artigo .

Para futuros leitores, que também são novos para o php:

Antes de ler o guia mencionado na resposta de Ricki em https://stackoverflow.com/a/7065880/1815624 , que menciona um bom guia e é desafiadoramente uma leitura recomendada, eu recomendaria ler esta resposta primeiro:

https://security.stackexchange.com/a/32853/31943

então leia o guia mencionado por Ricki em:

http://blog.insicdesigns.com/2009/01/secure-file-upload-in-php-web-applications/

Depois de tudo isso, se você precisar de mais segurança, você deve considerar se desconectar da internet. : P

Há um milhão de scripts de upload de arquivos por aí. Este não é pior do que os outros.

Embora a “proteção” de carregar arquivos diferentes dos pngs não funcionará (ele só verifica o nome do arquivo).

Carregar arquivos é bastante seguro – está dando aos outros a chance de fazer o download deles que abre seu servidor para certos tipos de ataques. O artigo que você referenciou não menciona dois pontos importantes:

  • nunca forneça arquivos fornecidos pelo usuário do mesmo domínio que a sua página da Web . Tem um domínio separado para downloads. Dessa forma, mesmo se alguém conseguir fazer o upload de uma animação flash ou um pedaço de HTML, seu domínio não sofrerá ataques cruzados (por exemplo, se o seu aplicativo possui um domínio de example.org, você deve servir o conteúdo do usuário, por exemplo, de downloads. example.com);
  • sempre serve arquivos carregados com headers bem controlados.