Evite ataques de SQL Injection no PHP e MySQL


Fonte: www.maisumblog.com

Em geral, o termo SQL Injection é bastante conhecido. No entanto, fazer uma função para projetos em PHP e MySQL, que evite de forma eficaz os problemas de segurança e não seja destrutiva, não é um assunto de conhecimento de todos.

Alguns programadores usam a função str_replace() para remover palavras como SELECT, DELETE, UPDATE, TRUNCATE, entre outras. No entanto, se um usuário do site, por exemplo, for falar sobre programação ou usar um desses termos em inglês ele simplesmente vai sumir do seu texto. Outra função adotada é htmlspecialchars() e htmlentities(), que aumentam o volume dos dados no banco de dados e deixam elas como HTML sendo que em outras aplicações pode ser totalmente desnecessário e não compatível o uso desses caracteres.

Também é conhecida a função addslashes(), que adiciona barras invertidas antes de aspas simples e duplas. Esta função é funcional, porém meio ultapassada e prejudica a visualização dos textos. É possível remover as barras nos dados vindos do banco com o auxílio da funcão stripslashes(), desta forma o trabalho será dobrado, pois os dados serão tratados na entrada e saída do banco sem necessidade.

Sendo assim, seguem sugestões que realmente previne sistemas contra ataques de SQL Injection sem comprometer textos ou aumentar o volume no banco de dados.

A melhor função para proteger sistemas em PHP e MySQL contra SQL Injection é a mysql_real_escape_string(), ela escapa os caracteres especiais como aspas simples e duplas antes de enviar para o banco de dados.

Também é preciso ter em mente que se a diretiva get_magic_quotes_gpc() estiver ON ele irá acrescentar barras invertidas automaticamente antes de aspas simples e duplas, o problema é que ele irá enviar para o banco de dados com as barras invertidas, comprometendo o texto. Para contornar isso basta usar a função stripslashes() para remover essas barras invertidas.

Segue exemplo da função com o nome de anti_sql_injection():

Note que na função primeiro é verificado se a o valor informado não é numérico, ou seja, que precisa ser tratado, em seguida, se a diretiva get_magic_quotes_gpc() está ativada, se estiver usa-se a função stripslashes() conforme falado anteriormente. Logo verifique se existe a função mysql_real_escape_string(), se existir use-a, caso contrário usamos a função mysql_escape_string().

Veja um exemplo de como usar a função:

Pronto! Agora sua aplicação está protegida contra ataques de SQL Injection, e o melhor de tudo, sem destruir o conteúdo do sistema.

Caterine Greif

Coordenadora de Marketing em KingHost
Entusiasta de Agile Marketing, é formada em Relações Públicas pela PUCRS, possui especialização em Marketing Digital pela ESPM e MBA em Gestão de Projetos pela USP. Com certificação em AdWords e Analytics pelo Google e Inbound Marketing pela Hubspot, possui 10 anos de experiência em comunicação e marketing digital.
Caterine Greif

Comentários

comentário(s)

Categories

8 Comments

Add yours
  1. check this out. More info

    I truly love your site.. Very nice colors & theme.

    Did you make this website yourself? Please reply back as I’m hoping to create my own personal site and want to learn where you got this from or what the theme is called. Thanks!

+ Leave a Comment