Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] ERRO DE CÓDIGO E SUGESTÃO DE CORREÇÃO

ERRO DE CÓDIGO E SUGESTÃO DE CORREÇÃO

Por Ricardo Costa Val do Rosario e CoPilot 365

PERGUNTA

QUAL O ERRO QUE EXISTE NESSE CÓDIGO E COMO PODE SER O MESMO CORRIGIDO?

Python Copy

def login(username, password):
    connection = sqlite3.connect('users.db')
    cursor = connection.cursor()

    query = f"SELECT * FROM users WHERE username = '{username}' AND password = '{password}'"

    cursor.execute(query)
    user = cursor.fetchone()

    connection.close()

    return user is not None

RESPOSTA

  • O código apresenta uma vulnerabilidade de SQL Injection.

  • Isso ocorre porque os valores de *username e password *são inseridos diretamente na string da consulta SQL por meio de f-string, o que permite que um usuário mal-intencionado insira comandos SQL arbitrários e potencialmente acesse ou modifique informações sensíveis no banco de dados.

  • Para corrigir esse problema e tornar a consulta segura, é recomendado o uso de consultas parametrizadas.

Por exemplo:

Python Copy

def login(username, password):
    connection = sqlite3.connect('users.db')
    cursor = connection.cursor()

    query = "SELECT * FROM users WHERE username = ? AND password = ?"
    cursor.execute(query, (username, password))
    user = cursor.fetchone()

    connection.close()
    return user is not None
  • Essa abordagem garante que os valores dos parâmetros sejam escapados corretamente, evitando a execução indesejada de comandos SQL injetados.

  • Além do SQL injection, há outras vulnerabilidades comuns relacionadas tanto à forma como as consultas SQL são formuladas quanto à configuração e ao gerenciamento do banco de dados. Aqui estão alguns exemplos:

1. Exposição de Informações Sensíveis:

  • Mensagens de erro detalhadas ou excessivamente informativas podem revelar a estrutura do banco de dados, nomes de tabelas, colunas ou versões do software.

  • Essa exposição facilita para que um atacante entenda o ambiente e monte ataques direcionados.

  • Para evitar esse problema, é recomendado tratar os erros de forma genérica e registrar detalhes internamente, sem repassá-los à interface do usuário[^3^][^4^].

2. Uso Excessivo de Privilégios:

  • Quando a aplicação utiliza uma conexão com o banco de dados com privilégios administrativos ou amplos demais, mesmo uma exploração potencialmente limitada pode levar a consequências graves, como modificação ou exfiltração completa dos dados.

  • A adoção do princípio do menor privilégio — conceder apenas os acessos estritamente necessários para cada operação é essencial para mitigar esse risco.

3. Injeção de Dados Maliciosos de Segunda Ordem:

  • Em situações em que dados de entrada são salvos no banco sem o tratamento adequado e, posteriormente, utilizados para compor novas consultas, pode ocorrer uma “injeção de segunda ordem”.

  • Inicialmente, esses dados podem parecer inofensivos, mas quando reutilizados sem sanitização adicional, podem permitir a execução de comandos maliciosos.

4. Vulnerabilidades em Procedimentos Armazenados:

  • Embora os procedimentos armazenados sejam uma forma de encapsular a lógica de acesso aos dados, eles podem ser vulneráveis se não validarem corretamente os parâmetros de entrada.

  • Se esses procedimentos armazenados utilizarem concatenção de strings ou não implementarem verificações rigorosas, podem ser explorados de maneira semelhante às consultas dinâmicas vulneráveis a injeção.

5. Armazenamento Inseguro de Dados Sensíveis:

  • Mesmo que a consulta em si não seja vulnerável a injeção, o armazenamento inadequado dos dados como senha sem texto claro ou usando algoritmos de hashing fracos pode comprometer toda a segurança do sistema caso um atacante consiga acesso ao banco de dados.

  • É importante aplicar técnicas robustas de criptografia e hashing, por exemplo:

(bcrypt ou Argon2)

para proteger informações confidenciais

Considerações Finais

  • Essas vulnerabilidades demonstram que a segurança em SQL vai além do risco direto de injeção.

  • É fundamental implementar boas práticas na escrita de consultas, na gestão de privilégios e na configuração segura do ambiente de banco de dados.

  • Devem serem tomadas ações capazes de não só prevenir ataques diretos, mas que também dificultem a exploração de informações internas por potenciais invasores.

2 respostas

Saudações, Ricardo! Tudo bem?

Parabéns pelo trabalho! Mantenha esse ritmo e continue compartilhando na nossa comunidade.

Seu prompt foi claro e bem direcionado, o que gerou uma resposta completa e tecnicamente rica. Gostei muito de como houve a identificação do problema de SQL Injection e de como ocorreu a apresentação da correção. E o trabalho ainda foi além, abordou boas práticas de segurança de forma abrangente e didática.

Essa combinação entre uma pergunta bem estruturada e um conteúdo aprofundado mostra um uso inteligente da IA para o aprendizado.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
solução!

Daniel, estou muito feliz com minha evolução. Sou grato pelas suas considerações e sugestões de leitura, que foram essenciais para o meu progresso. Atenciosamente,Ricardo