Com as ondas de ataques a sites que ocorrem nos últimos tempos estamos preparando uma matéria sobre os 3 tipos de ataques básicos que podem facilmente invadir qualquer site incluindo o roubo de informações e acesso a todos os serviços como e-mails, ftp, Cpanel e MySQL.
A contrário de que muitos pensam o problema de ter um site invadido em 90% das vezes não implica em falha de segurança do servidor e sim na programação do próprio site.
Se o servidor fosse garantia de segurança não haveria necessidade de se tratar dados na linguagem de programação escolhida, seja JS, PHP ou ASP. A segurança dos servidores basicamente se baseiam em um bom firewall com uma boa configuração e algum módulo extra de segurança para o web-server, no caso do Apache o mais comum é o uso do mod_security
No demais, 90% da segurança de seu site está nas mãos do próprio desenvolvedor.
MySQL Injection
Esse ataque explora falhas de segurança nas querys MySQL escritas nos seus scripts PHP, o principio é simples, injetar nas querys códigos hexadecimais que de alguma forma retornam dados de seu banco de dados, número de tabelas e colunas. A forma mais simples de ataque é pela própria URL de seu site. É comum encontrarmos URLs do tipo
minhaloja.com.br/produto.php?cod=4577
Qualquer programador em nível iniciante entenderia que na página produto.php vai existir alguma query MySQL consultado dados do código 4577.
Como se proteger?
Utilizando a função mysql_real_escape_string() para tratar as variáveis passadas as querys.
<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>
PHP Injection e XSS
São ataques semelhantes, mudando apenas a técnica. São injetados scripts php, javascript ou códigos hexadecimais nas URLs a fim de obter dados ou novas variáveis que possam prejudicar. Uma vez conseguindo injetar códigos novos na sua página um hacker pode facilmente ler todas as sessões e cookies abertos em seu site e capturar facilmente qualquer senha que esteja armezana em sessões.
Como se proteger?
Evite o uso de register_globals e session_auto_start ligados, a preguiça de tratar os dados poderão lhe causar muitos problemas.
Ao enviar dados para URL sempre os trate com $_POST ou $_GET dependendo do caso e sempre que receber um variável na URL trate para garantir de que códigos injectados não sejam aceitos pela página. Em PHP utilize a função strip_tags() ela permite retirar da variáveis tags HTML. Para reforçar a função htmlentities() também é bem vida que permite retirar tags especiais como *, %, (), entre outras que são usadas nestes ataques.
<?php
$str = "\x8F!!!";
// Outputs an empty string
echo strip_tags(htmlentities($str, ENT_QUOTES, "UTF-8"));
?>
Deface
Normalmente ataques de MySQL Injection e XSS acabam no deface que nada mais é que desconfigurar o site todo ou pelo menos o index. Existem várias ferramentas que permitem estes tipos de ataques mas obviamente não é qualquer um que sabe usá-las.
Dessa forma somente o seu próprio site poderá executar de forma segura arquivos e diretórios
Evite o uso de permissões 777 desnecessárias para arquivos e diretórios isso facilita a inserção de códigos neste diretórios ou alterações nos scripts com permissões 777.
Além das prevenções sobre Injections outra dica para se prevenir dos Defaces são as permissões de arquivos hospedados.
Como se proteger?
Siga as dicas de proteção contra injections citadas acima e use sempre permissões corretas para diretórios e arquivos, sendo
755 para diretórios
644 para arquivos
Mais dicas
- Evite o uso da função mail() em seus scripts, prefira autentica-los, a função mail() pode ser usadas por spammers para fazer spam usando seus formulários. Exemplo da InHosting do PHP Mailer para autenticar e-mails.
- Em formulários públicos de seu site, aqueles que podem ser preenchidos por qualquer pessoa, sempre coloque uma validação como o Captcha, muitos injections também podem surgir atacando forms. Visite; http://www.phpcaptcha.org/
- Faça sempre backups periódicos, o Cpanel oferece ferramentas para isto mas baixe o backup em seu computador, não faz sentido manté-lo no próprio servidor.
- Sempre que armezenar senhas no MySQL, recomendamos a leitura desse artigo do Mario Sam; http://www.mariosam.com/desenvolvimento/sql/mysql-sql/criptografando-senhas-no-mysql
- Sempre que armazenar dados pessoais como CPF e RG de pessoas em banco de dados procure uma forma de também criptografar essas informações
- Se faz uso de MySQL Remoto, evite o uso do wildcard %, configure apenas o acesso para a sua faixa de IP ou para o domínio de seu provedor
- Consulte sempre o AwStats para ver a origem das visitas de seu site. O AwStats mostra alguns ips que fazem acesso ao seu site, você pode bloqueá-los através do .httacess, veja neste post como fazer, além de ocultar diretórios que você julgar que devem ser xeretados por terceiros, somente por você
http://inhosting.com.br/blog/?p=536
Esperemos que tenha gostado e que seja de grande valia. Até o próx. Post.



julho 1st, 2011
Blog Admin 
Posted in
Tags:
Até agora este foi o melhor post que encontrei sobre segurança para PHP, simples e sem frescuras.
Tem muito blog por aí que faz um drama danado só para explicar que o strip_tags trata variáveis e até agora não vi em nenhum lugar falando sobre as permissões dos arquivos que é um alvo muito fácil para deface.
Parabéns, esterei replicando no meu blog.
Mais um excelente Post apesar de não estar tratando em 100% todas as preocações mas ao menos ensina o básico. O básico sendo seguido já desanima qualquer hacker.
e ASP?
ASP também está passível a injecções. Recomendamos;
http://www.inw-seguranca.com/guia-definitivo-do-asp-injection-avancado” rel=”nofollow”>
http://www.inw-seguranca.com/guia-definitivo-do-asp-injection-avancado
[...] artigo “Mantenha seu site seguro em servidores Linux” explicamos alguns tipos de invasões mais comuns e como se proteger delas, algumas funções [...]