O ataque de injeção de SQL é uma técnica maliciosa onde um atacante insere comandos SQL não autorizados em uma consulta através das entradas de um formulário ou de parâmetros de URL. Essa vulnerabilidade ocorre quando entradas não validadas ou sanitizadas de usuários são incorporadas diretamente em instruções SQL executadas pelo banco de dados.
Os ataques de injeção de SQL podem resultar em sérios riscos de segurança, incluindo:
Imagine um código Python que recebe um parâmetro de entrada para buscar um usuário no banco de dados:
$id = $_GET['id'];
$sql = "SELECT * FROM usuarios WHERE id = $id";
No Python, poderíamos ter algo semelhante:
import sqlite3
# Simulação do parâmetro GET
id = "1'; DROP TABLE usuarios; --"
# Conexão ao banco de dados SQLite (apenas para exemplo)
conn = sqlite3.connect('exemplo.db')
cursor = conn.cursor()
# Consulta SQL vulnerável
query = f"SELECT * FROM usuarios WHERE id = '{id}'"
# Executa a consulta
cursor.execute(query)
# Obtém os resultados
results = cursor.fetchall()
# Imprime os resultados (apenas para demonstração)
for row in results:
print(row)
# Fecha a conexão
conn.close()
Neste exemplo, se o parâmetro 'id' for manipulado por um atacante, como no caso de "1'; DROP TABLE usuarios; --"
, a consulta SQL resultante se tornará maliciosa, tentando deletar a tabela 'usuarios' do banco de dados.
Considere um formulário de login onde o usuário insere seu nome de usuário e senha:
SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '$senha';
Se o usuário inserir ' OR '1'='1
como senha, a consulta se tornará verdadeira para qualquer usuário, pois o SQL se torna:
SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '' OR '1'='1';
Em alguns casos, os hackers podem usar instruções SQL aninhadas para explorar vulnerabilidades. Veja o exemplo:
SELECT * FROM produtos WHERE categoria = '$categoria' AND preco > (SELECT AVG(preco) FROM produtos);
Se a variável $categoria
for manipulada, um invasor pode fechar a instrução WHERE e executar outra consulta maliciosa.
Os hackers exploram vulnerabilidades de injeção de SQL de várias maneiras:
Adotar essas práticas pode reduzir significativamente o risco de vulnerabilidades de injeção de SQL e ajudar a proteger suas aplicações contra ataques maliciosos.