2
respostas

Aplicando mais segurança nos processo de upload com PHP

Olá galera!

Estou implementando alguns códigos com PHP, e cheguei a uma parte onde faço upload de arquivos (principalmente imagens). Fiquei observando o tanto frágil é o código que estou implementando pois, se o usuário (malandro) obter através do console a minha URL que recebe o POST do $_FILES, e se ele seguir o padrão dos campos necessários para upload, seria possível fazer um boot para lotar meu HD de imagens de maneira fácil!

Com isso, estou pesquisando um pouco mais sobre segurança com os envios de arquivo em geral... Pois, gostaria de aproveitar o espaço e pedir algumas dicas/sugestões para resolução deste problema.

Valeu!!

2 respostas

Algo que fazemos para resolver este tipo de problema é criar um campo hidden com nome e conteudo variavel, baseados num valor randômico gerado em sessão. Ao receber o post, verificamos se o nome/conteudo do hidden batem com as sessões que criamos. Se bater, prosseguimos:

Um exemplo seria este:

https://css-tricks.com/serious-form-security/

No caso deste tutorial, o nome do campo hidden é fixo, mas você pode deixar randômico.

Desta forma, cada form tem um ID único.

Outras formas de segurança, além dessa, seriam as seguintes:

  • Limpar o nome do arquivo, ou demais dados postados, para evitar SQL Injection
  • Limitar o tamanho do upload
  • Verificar se o MIME type do upload é compatível com aquele que você está esperando.
http://php.net/manual/pt_BR/function.mime-content-type.php

hmmm, interessante!

Esse caso do valor em hidden seria aquele CSRF do laravel por exemplo. Certo?

Outra dúvida. Qual a permissão adequada para se colocar em uma pasta?