nilsonLazarin / WeGIA

WeGIA: Web gerenciador para instituições assistenciais
Other
5 stars 6 forks source link

Análise de vulnerabilidade do arquivo html/socio/sistema/atualiza_pagamentos.php #186

Open joaopontes22 opened 4 months ago

joaopontes22 commented 4 months ago

Vulnerability Analysis

  1. Injeção de SQL: A vulnerabilidade de injeção de SQL pode ocorrer na linha que contém a atualização do banco de dados:
mysqli_query($conexao, "UPDATE cobrancas set status='Pago', data_pagamento='$data', valor_pago=$valor where codigo = $codigo");

Neste trecho, as variáveis $data, $valor e $codigo estão sendo diretamente interpoladas na string da consulta SQL. Isso pode permitir que um atacante manipule essas variáveis para executar comandos maliciosos no banco de dados.

Solução: Utilize prepared statements para evitar a injeção de SQL. Aqui está um exemplo de como você poderia modificar a consulta para utilizar prepared statements:

$stmt = $conexao->prepare("UPDATE cobrancas set status='Pago', data_pagamento=?, valor_pago=? where codigo = ?");
$stmt->bind_param("sdi", $data, $valor, $codigo);
$stmt->execute();
  1. Falta de validação de entrada: O código não realiza uma validação adequada dos dados vindos do usuário. Ele simplesmente utiliza as variáveis sem verificar se elas foram definidas, se são do tipo esperado ou se estão vazias.

Solução: É importante validar e sanitizar os dados de entrada antes de utilizá-los no código. Você poderia, por exemplo, verificar se as chaves esperadas estão presentes no array $_POST após a decodificação do JSON e se os valores são do tipo esperado.

  1. Exposição de informações sensíveis: A linha abaixo expõe informações sensíveis, como erros do banco de dados, para possíveis usuários mal intencionados:
echo(json_encode($cadastrado));

Caso ocorra algum erro na execução da query, o usuário poderá receber uma mensagem de erro do banco de dados, o que não é desejável.

Solução: Trate os erros adequadamente e retorne mensagens amigáveis para o usuário em caso de falha na execução da query.

Além disso, certifique-se de que as configurações do PHP estão adequadas para não exibir erros no ambiente de produção. Você pode configurar o error_reporting e display_errors no arquivo php.ini ou no próprio código PHP.

nicolly015 commented 2 months ago