Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Análise de vulnerabilidade do arquivo dao/AlmoxarifeDAO.php #436

Closed
joaopontes22 opened this issue May 22, 2024 · 2 comments
Closed

Análise de vulnerabilidade do arquivo dao/AlmoxarifeDAO.php #436

joaopontes22 opened this issue May 22, 2024 · 2 comments
Assignees
Labels
Security MN análise

Comments

@joaopontes22
Copy link
Contributor

Vulnerability Analysis
O código apresenta vulnerabilidades de segurança, especificamente vulnerabilidades de Injeção de SQL.

  1. Na função listarTodos(), a consulta SQL é construída diretamente concatenando parâmetros externos (id_almoxarife, id_almoxarifado, id_funcionario). Isso pode permitir que um atacante execute um ataque de injeção de SQL, inserindo comandos maliciosos na requisição para manipular a consulta SQL original.

  2. Na função excluir($id), o parâmetro $id é utilizado diretamente na consulta SQL sem nenhuma validação ou sanitização. Isso permite que um atacante execute um ataque de injeção de SQL enviando um valor malicioso para a exclusão de registros.

Para mitigar as vulnerabilidades de Injeção de SQL, é recomendado utilizar prepared statements com parâmetros vinculados, ao invés de concatenar diretamente os valores na string da consulta SQL. Dessa forma, os parâmetros são tratados de forma segura e não permitirão a execução de comandos maliciosos.

Segue uma versão corrigida do código, utilizando prepared statements:

class AlmoxarifeDAO {
    public function listarTodos() {
        try {
            $pdo = Conexao::connect();
            $stmt = $pdo->prepare("
                SELECT afe.id_almoxarife, afe.id_funcionario, afe.id_almoxarifado, almox.descricao_almoxarifado, p.nome as descricao_funcionario, afe.data_registro
                FROM almoxarife afe
                LEFT JOIN almoxarifado almox ON almox.id_almoxarifado = afe.id_almoxarifado
                LEFT JOIN funcionario f ON f.id_funcionario = afe.id_funcionario
                LEFT JOIN pessoa p ON p.id_pessoa = f.id_pessoa
            ");
            $stmt->execute();
            $almoxarife = $stmt->fetchAll(PDO::FETCH_ASSOC);
            return json_encode($almoxarife);
        } catch (PDOException $e) {
            echo 'Error:' . $e->getMessage();
        }
    }

    public function excluir($id) {
        try {
            $pdo = Conexao::connect();
            $stmt = $pdo->prepare("DELETE FROM almoxarife WHERE id_almoxarife = :id");
            $stmt->bindParam(':id', $id);
            $stmt->execute();
        } catch (PDOException $e) {
            echo 'Error:' . $e->getMessage();
        }
    }
}

Com essas alterações, as consultas SQL são executadas de forma segura, mitigando as vulnerabilidades de Injeção de SQL.

@joaopontes22 joaopontes22 added the Security MN análise label May 22, 2024
@GabrielPintoSouza GabrielPintoSouza self-assigned this Jul 5, 2024
GabrielPintoSouza added a commit that referenced this issue Jul 5, 2024
@GabrielPintoSouza
Copy link
Collaborator

  • Não é necessário utilizar Prepared Statements no método listarTodos() pois a query não utiliza nenhum parâmetro externo
  • Implementado Prepared Statements no método excluir()

@GabrielPintoSouza
Copy link
Collaborator

Feedback

  • O comentário foi útil? 5 = Muito útil
  • O erro foi fácil de localizar? 5 = Muito fácil
  • Foi possível corrigir? Sim
  • O quão fácil de corrigir? 5 = Muito fácil

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Security MN análise
Projects
None yet
Development

No branches or pull requests

2 participants