Skip to content
Skip to content
CTASoftware Blog

Para Desenvolvedores De Software

  • Sobre Mim
← CRUD em PHP
Liberar Firewall para uso do SQL Server 2008 na Rede →
-->

Evitar SQL Injection usando Prepared Statements no PHP

Posted on 19 de julho de 2012 by Everton Gonçalves

Venho postando uma série de informações relacionados a PDO e esclarecimentos sobre o uso do Prepared Statements, consequentemente recaímos sobre a prevenção de ataques de injeção SQL.

Muitos são os programadores que não tomam qualquer prevenção em suas aplicações ou sites para evitar ataques tão usuais e fáceis de se precaver, não se sabe se por preguiça, vicio ou falta de conhecimento, mas são práticas simples e que facilitam a vida do desenvolvedor, tanto em facilidade de desenvolvimento e leitura do código quanto em segurança da informação.

Para sermos específicos sobre o que seria um ataque de injeção SQL, experimente em uma aplicação que não utiliza o prepared statements a seguinte situação:

  1. Crie uma tela de autenticação do usuário;
  2. No seu formulário insira a seguinte instrução ‘ OR 1’

Observe que o valor recebido pelo servidor será SELECT * FROM tabela WHERE username = “” OR 1, como a expressão OR 1, representará sempre uma verdade (TRUE), o valor retornado será todos os usuários de seu banco de dados.
Observe uma segunda situação onde a instrução informada for igual a ‘; DELETE FROM tabela WHERE 1 OR username = ‘ realize o teste e verifique o resultado. É de imaginar que seria um grande delete em sua base de dados, correto?

Pois bem, vemos na internet inúmeras formas de tentar evitar esses tipos de ataque utilizando expressões regulares, funções enormes de validação, dentre outras alternativas, mas não vemos muitas pessoas se referindo ao Prepared Statements como uma poderosa arma contra esse tipo de ataque.

Mas o que é esse “Prepared Statements”?

São as conhecidas “consultas pré-prontas”, a diferença dessas consultas é que no lugar das variáveis você irá inserir os placeholders, marcador de lugar, normalmente representado por “?”, dessa maneira estaremos informando ao MySQL onde estarão cada informação.

Um exemplo básico de utilização do PDO:

// o método PDO::prepare() retorna um objeto da classe PDOStatement ou FALSE se ocorreu algum erro (neste caso use $pdo->errorInfo() para descobrir o que deu errado)

$stmt = $pdo->prepare(“SELECT * FROM tabela WHERE username = ?”);

// O método PDOStatement::bindValue() aceita como parâmetro a posição da interrogação e o valor a ser inserido na mesma

$stmt->bindValue(1, ‘ctasoftware’);

// executamos o statement
$stmt->execute();

// Com o método que segue poderemos pegar todos os valores retornados, a partir dele implementaremos nossa lógica para percorrer pegando todos os valores
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

Em suma, é possível evitar ataques, ter MAIOR PRODUTIVIDADE e segurança da informação, além disso já está comprovado que statements são executados mais rápidos que consultas normais.

Vamos criando mais posts explorando essa questão.

Vale a pesquisa no www.php.net sobre o assunto inclusive para abordar os métodos disponíveis.

Compartilhe isso:

  • Clique para compartilhar no Twitter(abre em nova janela)
  • Clique para compartilhar no Facebook(abre em nova janela)
  • Clique para compartilhar no WhatsApp(abre em nova janela)
  • Clique para compartilhar no Telegram(abre em nova janela)
  • Clique para compartilhar no LinkedIn(abre em nova janela)
  • Clique para enviar um link por e-mail para um amigo(abre em nova janela)

Relacionado

About Everton Gonçalves

http://www.ctasoftware.com.br
View all posts by Everton Gonçalves
This entry was posted in MySQL, PHP and tagged Gerador de Código PHP, MySQL, PHP, Prepared Statements, SQL Injection. Bookmark the <a href="https://www.ctasoftware.com.br/blog/evitar-sql-injection-usando-prepared-statements-no-php/" title="Permalink to Evitar SQL Injection usando Prepared Statements no PHP" rel="bookmark">permalink</a>.
← CRUD em PHP
Liberar Firewall para uso do SQL Server 2008 na Rede →

Deixe um comentário Cancelar resposta

Você precisa fazer o login para publicar um comentário.

© 2026 | Blog info WordPress Theme | By Bharat Kambariya