gototopgototop
MySQL Security - Joomla e segurança (Artigo 10) PDF Imprimir E-mail
mysqlO servidor de banco de dados MySQL pode armazenar uma grande quantidade de informações importantes e privadas. Se o Joomla está sendo usado para gerenciamento de contato ( formação de carta de clientes para mala direta) ou gestão comércio eletrônico, a possibilidade de acesso a informações particulares dos usuários pode ser substancial. Portanto, você deve seguir as orientações abaixo ou ter certeza que o seu HOST de hospedagem se preocupa:

Guia geral de segurança para MySQL

" Qualquer um usando o MySQL em um computador conectado à internet deve ler esta seção para evitar os erros mais comuns de segurança.

Ao discutir segurança, enfatizamos a necessidade de proteger integralmente todo o servidor (e não apenas o servidor MySQL) contra todos os tipos de ataques  aplicáveis: escutas, alteração, reprodução e negação de serviço.

MySQL usa segurança baseada em Lista de Controle de Acesso (ACL) para todas as conexões, consultas, e outras operações que o usuário pode tentar realizar. Há também suporte para conexões criptografadas (SSL-encrypted) entre clientes MySQL e servidores. Muitos dos conceitos discutidos aqui não são específicos do MySQL, as mesmas idéias gerais aplicam-se, em conjunto,  a quase todas as aplicações.

Quando executando o MySQL, siga estas orientações, sempre que possível:
  • Nunca dê a ninguém (exceto ao usuário root do MySQL), acesso à tabela user no banco de dados mysql! Isto é crítico;
  • Saiba o privilégio de acesso ao sistema pelo MySQL. As declarações GRANT e REVOKE são utilizadas para controlar o acesso ao MySQL. Não conceda mais privilégios do que o necessário. Nunca conceda privilégios a todos os hosts.
Checklist de segurança MySQL
  • Tente o comando mysql-u root.  Se você é capaz de se conectar com sucesso ao servidor sem ser solicitado uma senha, qualquer um pode se conectar ao seu servidor MySQL como usuário root, com privilégios totais! Reveja as instruções de instalação do MySQL, prestando especial atenção às informações obre como definir uma senha root.
  • Utilize a declaração SHOW GRANTS para verificar quais as contas tenham acesso a quê. Então use a declaração REVOKE para remover esses privilégios que não são necessários.
  • Não guarde qualquer senha de texto simples em seu banco de dados. Se o seu computador fica comprometido, o invasor pode ter a lista completa de senhas e utilizá-las. Em vez disso, utilize a função MD5 (), SHA1 (), ou alguma outra forma, ou função  que crrie um hash e armazene o valor do hash.
  • Não escolha senhas de dicionários. Existem programas especiais para quebrar senhas. Mesmo senhas como "xfish98" são muito ruins. Muito melhor é "duag98", que contém a mesma palavra "peixe", mas foi digitado uma chave para a esquerda em um teclado padrão QWERTY.
  • Outro método é utilizar uma senha que é tomada a partir do primeiro caracter de cada palavra em uma frase (por exemplo, "Maria tinha um cordeiro pequeno" resulta em uma senha de "Mtucp"). A senha é fácil de lembrar e digitar, mas difícil de adivinhar para quem não conhece a frase.
  • Invista em um firewall. Isto protege-o de, pelo menos, 50% de todos os tipos de exploits em qualquer software. Ponha o MySQL atrás do firewall ou de uma zona desmilitarizada (DMZ).
  • Tente digitalizar seu portos a partir da Internet utilizando uma ferramenta como o nmap. O MySQL utiliza a porta 3306 por padrão. Esta porta não deve estar acessível a partir de HOST não confiável. Nota: Mais uma vez o HOST é fundamental. Outra forma simples de verificar se há ou não uma porta aberta para seu MySQL é tentar o seguinte comando a partir de uma máquina remota, onde server_host é o nome de host ou número IP do hospedeiro em que seu servidor MySQL é executado:  shell> telnet server_host 3306 Se você receber uma ligação e alguns caracteres, a porta está aberta, e deve ser fechada no seu firewall ou roteador, a menos que você realmente tem uma boa razão para mantê-la aberta. Se o telnet não recebe um retorno ou a conexão for recusada, a porta está bloqueada, que é o que esperamos.
  • Não confie em quaisquer dados inseridos pelos usuários de suas aplicações. Eles podem tentar enganar seu código através de SQL Injection que consiste da introdução de caracteres especiais ou seqüências em formulários Web, URLs, ou o que quer que seja através de formulários disponibilizados por você ou pela aplicação. Tenha certeza de que a sua aplicação continua segura se um usuário digita algo como "DROP DATABASE mysql;".  Este é um exemplo extremo, mas grandes vazamentos de segurança e perda de dados podem ocorrer como resultado de hackers utilizando técnicas semelhantes, se não se preparar para eles.
  • Um erro comum é o de proteger apenas os dados com valores string. Lembre-se de verificar dados numéricos também. Se um aplicativo gera uma consulta como SELECT * FROM tabela WHERE ID = 234 quando um usuário digitar o valor 234, o usuário pode digitar o valor 234 ou 1 = 1 e força a aplicação a executar a seguinte consulta: SELECT * FROM tabela WHERE ID = 234 ou 1 = 1. Como resultado, o servidor recupera cada linha da tabela. Isto expõe cada linha e causa uma carga excessiva no servidor. A maneira mais simples para proteger deste tipo de ataque é usar aspas simples em torno da constante numérica: SELECT * FROM tabela WHERE ID ='234 '. Se o usuário digitar informações adicionais, tudo se torna parte do comando. Em um contexto numérico, o MySQL automaticamente converte esta string para um número e elimina quaisquer caracteres não numéricos a partir dele.
  • Às vezes as pessoas pensam que, se um banco de dados contém somente dados disponíveis publicamente, não necessitam de ser protegidos. Esta afirmação é incorreta. Mesmo que seja admissível exibir qualquer linha no banco de dados, você deve ainda se proteger contra ataques de negação de serviço (por exemplo, aqueles que têm por base a técnica no parágrafo anterior que faz com que o servidor tenha um sobre carga e venha  a perder recursos). Caso contrário, o servidor torna-se indisponível aos usuários legítimos.
  • Tente entrar com aspas simples e duplas ( '' e "") em todos os seus formulários web. Se você obter qualquer tipo de erro do MySQL, investigue o problema imediatamente.
  • Tente modificar URLs dinâmicos, acrescentando ("""),% 23% 22% 27 ("'") e ("#"), para eles.
  • Tente modificar os tipos de dados de URLs dinâmicos de tipos de caracteres numéricos a utilizar os caracteres mostrados no exemplo anterior. A sua aplicação deve ser segura contra estes ataques e similares.
  • Tente introduzir caracteres, espaços e símbolos especiais em vez de números em campos numéricos. Sua aplicação deve removê-los antes de passar para o MySQL ou então gerar um erro. Passar valores para o MySQL sem validá-los antes é muito perigoso!
  • Verifique o tamanho dos dados antes de o passar para o MySQL.
  • O nome de usuário que irá conectar-se ao MySQL deverá ser diferente do usuário com perfil de administração de sua aplicaçãos. Não dê as suas aplicações qualquer acesso ao MySQL, utilize um script para conexão.
  • Muitas interfaces de programação de aplicativo fornecem um meio de escapar de caracteres especiais digitados  nos formulário. Utilizados de forma adequada, podem impedir a entrada de valores digitados pelos usuários que fazem com que o aplicativo se comporte de forma diferente da que você pretende:
  • MySQL API C: Use a chamada a API a mysql_real_escape_string ().
  • MySQL + +: Utilize escape e quote para modificar sua consulta.
  • Não transmitir dados em claro (não encriptado) dados através da Internet. Esta informação é acessível a todos que tenham  a capacidade para interceptar-lo e usá-lo para seus próprios fins. Em vez disso, utilize um protocolo criptografado, como SSL ou SSH. O MySQL suporta conexões SSL interno da versão 4.0.
  • Outra técnica é transmitir a comunicação pela porta SSH de forma codificada e através de um túnel.
  • Aprenda a utilizar os utilitários tcpdump e strings . Na maioria dos casos, você pode verificar se os fluxos de dados do MySQL não são criptografados, emitindo um comando como o seguinte: shell> tcpdump-l-i eth0-w - src ou dst port 3306 | strings
  • Isto funciona em Linux e deve funcionar com pequenas modificações sob outros sistemas.

Checklist de segurança MySQL + PHP
  • PHP: Use a função mysql_real_escape_string () (disponível a partir do PHP 4.3.0. No PHP 5, você pode usar a extensão mysqli, que suporta o protocolo de autenticação e senhas do MySQL que foi melhorado, bem como declarações preparadas com substituições.
Checklist de segurança MySQL + PERL
  • Perl DBI: Use substituições ou o médtodo quote().

Checklist de segurança MySQL + Ruby DBI
  • Ruby DBI: Use substituições ou o método quote().

Checklist de segurança MySQL + Java
  • Java JDBC: Utilize um objeto e módulo PreparedStatement
Outras interfaces de programação podem ter capacidades semelhantes.
Até o próximo artigo.
Artigo traduzido e adaptado por Júlio Coutinho. O original, está publicado no capítulo 14 do livro Professional Joomla - Programador para Programador, de Dan Rahmel.
Artigo Guia geral de segurança para MySQL traduzido e adaptado por Júlio Coutinho. O original, está publicado na Internet na seguinte url: http://dev.mysql.com/doc/refman/5.0/en/security-guidelines.html
  divulgue o artigo no orkut
Voltar

Your are currently browsing this site with Internet Explorer 6 (IE6).

Your current web browser must be updated to version 7 of Internet Explorer (IE7) to take advantage of all of template's capabilities.

Why should I upgrade to Internet Explorer 7? Microsoft has redesigned Internet Explorer from the ground up, with better security, new capabilities, and a whole new interface. Many changes resulted from the feedback of millions of users who tested prerelease versions of the new browser. The most compelling reason to upgrade is the improved security. The Internet of today is not the Internet of five years ago. There are dangers that simply didn't exist back in 2001, when Internet Explorer 6 was released to the world. Internet Explorer 7 makes surfing the web fundamentally safer by offering greater protection against viruses, spyware, and other online risks.

Get free downloads for Internet Explorer 7, including recommended updates as they become available. To download Internet Explorer 7 in the language of your choice, please visit the Internet Explorer 7 worldwide page.