DICA 02
DISCLAIMER
The information contained in this document may be privileged
and confidential and protected from disclosure. If the reader of
this document is not the intended recipient, or an employee
agent responsible for delivering this document to the
intended recipient, you are hereby notified that any
dissemination, distribution or copying of this communication is
strictly prohibited.
Como se prevenir contra o
SQL Injection
Objetivos
• O que é SQL Injection?
• Tipos de SQL Injection
• Como se proteger?
• Conclusão
O que é SQL Injection?
É um ataque que consiste na inserção (conhecido como
injeção) de uma query via aplicação web.
Tais vulnerabilidades estão presentes em códigos.
Este é o caso da "SQL Injection", brecha através da qual
um invasor pode executar queries ou statements
arbitrários numa base relacional via "injeção" de
comandos em campos de formulários.
Tipos de SQL Injection
• Poorly Filtered Strings
• Incorrect type handling
• Blind SQL Injection
• Double Blind SQL Injection
Como se proteger?
• Usando a função addslashes() tem o mesmo efeito que habilitar
magic quotes, porém só aplica onde for conveniente. O que ela faz
é colocar um caracter de escapa antes das aspas simples ou
dupla, antes da barra invertida e do caracter NULL.
• Usar 'prepared statements' ao invés do próprio código SQL
atribuíndo todas as outras medidas de prevenção usar esta, nos
daria mais performace e segurança, além de ser mais simples de
ler e escrever. Porem só pode ser usado em SELECT, INSERT,
UPDATE, REPLACE, DELETE e CREATE TABLE.
Como se proteger?
• $login = $_GET['login'] $query = "SELECT * FROM registos
WHERE login = '$login'";
• Ficaria assim:
• $query = "SELECT * FROM registos WHERE login = OR 1";
• Recomendo
Limitar Privilégios das contas com acesso ao DB. É importante manter
apenas os privilégios e acessos necessários. É comum muitas permissões
serem dadas para resolver problemas de funcionalidade, muito parecido ao
chmod 777 no linux.
Como se proteger?
• Verifique se todo parâmetro passado para o site é tratado
antes que seja concatenado na query. Por exemplo, nunca
faça simplesmente:
• // ASP
consulta = "DELETE FROM tabela WHERE id_tabela = " &
Request.Form("id")
• // PHP
$consulta = "DELETE FROM tabela WHERE id_tabela = " .
$_POST[id];
Como se proteger?
• Em vez disso, trate primeiro o Request.Form("id") ou $_POST[id], como neste
exemplo:
• //ASP
If IsNumeric(Request.Form("id")) Then
consulta = "DELETE FROM tabela WHERE id_tabela = " & Request.Form("id")
Else
Response.Write "Dados Inválidos"
Response.End
End If
Como se proteger?
• Em vez disso, trate primeiro o Request.Form("id") ou $_POST[id], como neste
exemplo:
• //PHP
if (is_numeric($_POST[id])) {
$consulta = "DELETE FROM tabela WHERE id_tabela = " . $_POST[id];
} else {
die("Dados inválidos");
}
Como se proteger?
• Para campos com strings é aconselhável checar pelos caracteres:
• " (aspas duplas)
• ' (aspas simples)
• (espaços)
• ; (ponto e vírgula)
• = (sinal de igual)
• < (sinal de menor que)
• > (sinal de maior que)
• ! (ponto de exclamação)
• -- (dois hifens, indica início de comentário em alguns bancos)
• # (sustenido ou jogo-da-velha, indica início de comentário em alguns bancos)
• // (duas barras, indica início de comentário em alguns bancos)
Como se proteger?
• Para campos com strings é aconselhável checar pelos caracteres:
• - SELECT - INSERT
• - UPDATE - DELETE
• - WHERE - JOIN
• - LEFT - INNER
• - NOT - IN
• - LIKE - TRUNCATE
• - DROP - CREATE
• - ALTER - DELIMITER
Conclusão
TRATE AS ENTRADAS DE DADOS

Dica 02 - Como mitigar os ataques de SQL Injection em aplicações WEB

  • 1.
  • 2.
    DISCLAIMER The information containedin this document may be privileged and confidential and protected from disclosure. If the reader of this document is not the intended recipient, or an employee agent responsible for delivering this document to the intended recipient, you are hereby notified that any dissemination, distribution or copying of this communication is strictly prohibited.
  • 3.
    Como se prevenircontra o SQL Injection
  • 4.
    Objetivos • O queé SQL Injection? • Tipos de SQL Injection • Como se proteger? • Conclusão
  • 5.
    O que éSQL Injection? É um ataque que consiste na inserção (conhecido como injeção) de uma query via aplicação web. Tais vulnerabilidades estão presentes em códigos. Este é o caso da "SQL Injection", brecha através da qual um invasor pode executar queries ou statements arbitrários numa base relacional via "injeção" de comandos em campos de formulários.
  • 6.
    Tipos de SQLInjection • Poorly Filtered Strings • Incorrect type handling • Blind SQL Injection • Double Blind SQL Injection
  • 7.
    Como se proteger? •Usando a função addslashes() tem o mesmo efeito que habilitar magic quotes, porém só aplica onde for conveniente. O que ela faz é colocar um caracter de escapa antes das aspas simples ou dupla, antes da barra invertida e do caracter NULL. • Usar 'prepared statements' ao invés do próprio código SQL atribuíndo todas as outras medidas de prevenção usar esta, nos daria mais performace e segurança, além de ser mais simples de ler e escrever. Porem só pode ser usado em SELECT, INSERT, UPDATE, REPLACE, DELETE e CREATE TABLE.
  • 8.
    Como se proteger? •$login = $_GET['login'] $query = "SELECT * FROM registos WHERE login = '$login'"; • Ficaria assim: • $query = "SELECT * FROM registos WHERE login = OR 1"; • Recomendo Limitar Privilégios das contas com acesso ao DB. É importante manter apenas os privilégios e acessos necessários. É comum muitas permissões serem dadas para resolver problemas de funcionalidade, muito parecido ao chmod 777 no linux.
  • 9.
    Como se proteger? •Verifique se todo parâmetro passado para o site é tratado antes que seja concatenado na query. Por exemplo, nunca faça simplesmente: • // ASP consulta = "DELETE FROM tabela WHERE id_tabela = " & Request.Form("id") • // PHP $consulta = "DELETE FROM tabela WHERE id_tabela = " . $_POST[id];
  • 10.
    Como se proteger? •Em vez disso, trate primeiro o Request.Form("id") ou $_POST[id], como neste exemplo: • //ASP If IsNumeric(Request.Form("id")) Then consulta = "DELETE FROM tabela WHERE id_tabela = " & Request.Form("id") Else Response.Write "Dados Inválidos" Response.End End If
  • 11.
    Como se proteger? •Em vez disso, trate primeiro o Request.Form("id") ou $_POST[id], como neste exemplo: • //PHP if (is_numeric($_POST[id])) { $consulta = "DELETE FROM tabela WHERE id_tabela = " . $_POST[id]; } else { die("Dados inválidos"); }
  • 12.
    Como se proteger? •Para campos com strings é aconselhável checar pelos caracteres: • " (aspas duplas) • ' (aspas simples) • (espaços) • ; (ponto e vírgula) • = (sinal de igual) • < (sinal de menor que) • > (sinal de maior que) • ! (ponto de exclamação) • -- (dois hifens, indica início de comentário em alguns bancos) • # (sustenido ou jogo-da-velha, indica início de comentário em alguns bancos) • // (duas barras, indica início de comentário em alguns bancos)
  • 13.
    Como se proteger? •Para campos com strings é aconselhável checar pelos caracteres: • - SELECT - INSERT • - UPDATE - DELETE • - WHERE - JOIN • - LEFT - INNER • - NOT - IN • - LIKE - TRUNCATE • - DROP - CREATE • - ALTER - DELIMITER
  • 14.

Notas do Editor

  • #2 Page 1
  • #3 Page 2
  • #9 Objetivos Explicar a importância do Princípio de Kerckhoff, Manejo de Chaves e Aleatoriedade. Descrever a criptografia de chave pública, ataques de homem do meio e certificados. Reconhecer as ameaças a SSL/TLS/HTTPS. Aplicar HTTPS corretamente.
  • #10 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #11 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #12 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #13 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #14 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #15 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #16 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #17 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #18 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital
  • #19 Especificação 6.1.1 Explicar a importância do Princípio de Kerckhoffs, do Gerenciamento de Chave e da Aleatoriedade. Discutir o princípio de Kerckhoffs. Ver a seção 6 do workbook. Explicar os termos de Criptografia - Confidencialidade - Integridade - Autenticação - Não Repúdio - Assinatura Digital