Pouca gente realmente se preocupa com a criação de sistemas seguros… São várias as providências que podem (e devem) ser tomadas para se criar um sistema um pouco mais seguro que os demais.
Vou listar aqui algumas medidas sobre as quais recomendo que você pesquise mais sobre e procure realizar/implementar no seu site… Vou falar sobre vários tipos e níveis de proteção, então não se assuste se você vir algo que nunca ouviu falar:
- Renomeie sua tabela de usuários
Não use nomes comuns como ‘users’, ‘user’, ‘usuarios’… Isso dificulta o acesso aos usuários e senhas caso consigam encontrar uma brecha de entrada pra SQL Injection.
- Sempre valide os parâmetros passados por $_GET
Se você passa números de produtos, números de páginas ou qualquer outro tipo de dado pela url, é bom validá-lo antes de usá-lo. Por exemplo: se você passa o ID de um produto por url (produtos.php?id=12), na hora de pegar esse valor, faça – no mínimo – isso:
$id = (int)$_GET['id'];
Com isso você transforma qualquer valor que esteja na URL em inteiro. Evitando assim vários tipos de ataque. Uma boa recomendação sobre esse ponto é o PHPIDS.
Leia mais: Instalando o PHPIDS no seu site
- Utilize CAPTCHAs
CAPTCHAs são aquelas imagens de verificação que você precisa digitar um código (geralmente alfa-numérico) pra poder enviar um formulário de cadastro ou algo parecido. Coloque esse recurso em qualquer formulário público: envio de comentário ou cadastros por exemplo. Elas evitam, na maioria da vezes, que o formulário seja usado e enviado por robôs/scripts automáticos. Uma boa recomendação é o reCAPTCHA.
- Não oculte os erros do PHP, manipule-os
As mensagens de erros do PHP podem colocar uma corda no seu pescoço, mas evite ocultá-los completamente. Crie um manipulador de erros (error handler) que envie e-mails para o administrador informando dados do erro como arquivo, linha, hora, código, ip, visitante… E pro visitante exiba apenas uma mensagem do tipo “Ocorreu um erro. O administrador do site foi informado“.Leia mais: Segurança – Manipulando erros no PHP
- Se for usar sistemas prontos de terceiros, use bancos de dados e usuários diferentes
Cada sistema tem suas vulnerabilidades, e quanto mais conhecido o sistema for, mais vulnerabilidades conhecidas eles pondem ter. Se você usar bancos de dados separados você evitar um ataque que use as falhas desses sistemas como ponte pra destruir o banco de dados do seu site.
- Utilize senhas e usuários do Apache/IIS
Se você não considera o gerenciador/administrador do seu site 200% seguro, crie usuários do Apache ou IIS e bloqueie o acesso à pasta do administrador. A tela de login não é bonita… mas quem já viu colete a prova de balas e/ou grades bonitas?
- Banindo IPs por um bem maior
Se for preciso banir um usuário insistente que sempre usa um determinado IP, faça-o. Impeça o acesso total dele. É melhor perder um visitante/IP do que meses ou anos de trabalho. Você pode usar vários recursos pra fazer isso: header() do PHP, .htaccess do Apache dentre outros. - Falhas de Login
Você considera normal um usuário errar o proprio login mais de cinco vezes? Sim? Então você está pedindo pra ter problemas… Impeça o acesso ao formulário de login por, no mínimo, 10 minutos e não esqueça de avisar um administrador do site sobre as tentativas falhas consecutivas.
- LOGs, muitos LOGs
Grave LOGs de tudo o que você puder… Cada edição, cada cadastro, cada login… Eles podem ocupar um espaço indesejado, mas são uma ótima ferramenta para rastrear a causa de problemas.
- Sessões
As sessões são um ótimo recurso, sempre necessárias. Mas é preciso ter cuidado com elas… Modifique o ID da sessão a cada carregamento de página, faça verificações de IP e compare com Cookies salvos. Se algo ficar diferente do esperado, ou algum dado não bater, expulse o usuário imediatamente.
Leia mais: Aprendendo a usar sessões no PHP
- Mantenha seu software atualizado
Atualizações são, além de melhorias nas funcionalidades e na performance do produto, melhorias na segurança de todo um projeto. Se você usa algum tipo de pacote/software pronto, fornecido por terceiros, mantenha-o SEMPRE atualizado, custe o trabalho que custar.
- Oculte a listagem de pastas e arquivos do Apache
Sabe quando você acessa uma pasta do seu servidor, que não tem nenhum arquivo index, e você vê aquela listagem feia, mostrando todas as pastas e arquivos daquele diretório? Faça com que isso acabe o mais rápido possível. É só colocar um Options -Indexes no .htaccess do root do seu site.
–
Mais pra frente irei postar outras partes sobre esse ‘guia’… Mas tomem as devidas providências com os seus sites, segurança nunca é o suficiente e nunca vai ser demais.
Abraços!
Você também vai gostar de ler:
- Criando um sistema de logins com classe no PHP – Parte 1
- Criando um sistema de logins com classe no PHP – Parte 4
- Criando um sistema de logins com classe no PHP – Parte 2
- Criando um sistema de login com PHP e MySQL
- Como criar um Sistema de Login com Níveis de Permissão
Postado em Artigos, MySQL, PHP, Tutoriais
Com as tags Apache, Ataque, Banco de Dados, Carregamento, Código, Cookie, Cookies, E-mail, Erros, Formulário, Funcionalidade, Header, htaccess, Login, LOGs, MySQL, Parâmetros, Pastas, Performance, PHP, PHPIDS, Projeto, Proteção, Root, Scripts, Segurança, Senha, Servidor, Sessão, Sessões, Sistema, Sistemas, Software, SQL, SQL Injection, URL
Escrito por Thiago Belem
Gostou desse artigo?
Não se esqueça de assinar o RSS e divulgue-o para o mundo: