Skip to content

Commit

Permalink
corrigindo GHSA-mjgr-2jxv-v8qf
Browse files Browse the repository at this point in the history
  • Loading branch information
GabrielPintoSouza committed Jan 7, 2025
1 parent 2117691 commit 01182db
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 54 deletions.
86 changes: 33 additions & 53 deletions html/socio/sistema/controller/controla_xlsx.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
<?php
//verificar privilégios do solicitante
// Inicia a sessão
session_start();
require_once(dirname(__DIR__, 3) . '/permissao/permissao.php');

// Verifica se o usuário está logado
if (!isset($_SESSION['id_pessoa'])) {
http_response_code(401);
echo json_encode(['erro' => 'Acesso não autorizado, usuário não está logado.']);
Expand All @@ -11,66 +12,49 @@

permissao($_SESSION['id_pessoa'], 4, 3);

// Inicializa a resposta padrão
$r = array(
"resultado" => false,
"mensagem" => "Ocorreu um erro ao processar o arquivo."
);

// Diretório seguro para armazenamento de arquivos
$diretorio = "../tabelas/";

// Cria os diretórios necessários, se não existirem
if (!is_dir($diretorio)) {
if (!mkdir($diretorio, 0755, true)) {
$r['mensagem'] = "Erro ao criar diretório de upload.";
echo json_encode($r);
exit;
}
}
// Inicializa a resposta padrão
$r = array(
"resultado" => false,
"mensagem" => "Ocorreu um erro ao processar o arquivo."
);

if (!empty($_FILES['arquivo']['name'])) {
// Lista de extensões e tipos MIME permitidos
$extensoesPermitidas = array('jpg', 'jpeg', 'png', 'gif');
$tiposMimePermitidos = array('image/jpeg', 'image/png', 'image/gif');
// Diretório seguro para armazenamento de arquivos
$diretorio = "../tabelas/";

// Obtém o nome e extensão do arquivo
$file_name_original = basename($_FILES['arquivo']['name']);
$extensao = strtolower(pathinfo($file_name_original, PATHINFO_EXTENSION));

if (in_array($extensao, $permitidos)) {
$file_name = preg_replace("/[^a-zA-Z0-9\._-]/", "_", basename($_FILES['arquivo']['name']));

if (move_uploaded_file($_FILES['arquivo']['tmp_name'], "../tabelas/" . $file_name)) {
$r['resultado'] = true;
$r['url'] = "./tabelas/" . htmlspecialchars($file_name, ENT_QUOTES, 'UTF-8');
} else {
$r['url'] = "Erro ao mover o arquivo.";
}
} else {
$r['url'] = "Tipo de arquivo não permitido.";
}
}
// Verifica se a extensão é permitida
if (!in_array($extensao, $extensoesPermitidas)) {
$r['mensagem'] = "Extensão de arquivo não permitida.";
// Cria o diretório, se não existir
if (!is_dir($diretorio)) {
if (!mkdir($diretorio, 0755, true)) {
$r['mensagem'] = "Erro ao criar diretório de upload.";
echo json_encode($r);
exit;
}
}

if (!empty($_FILES['arquivo']['name'])) {
// Tipos MIME permitidos para arquivos Excel (.xls e .xlsx)
$tiposMimePermitidos = array(
'application/vnd.ms-excel', // Para .xls
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' // Para .xlsx
);

// Obtém o tipo MIME do arquivo
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$tipoMime = finfo_file($finfo, $_FILES['arquivo']['tmp_name']);
finfo_close($finfo);

// Verifica se o tipo MIME é permitido
// Verifica se o tipo MIME do arquivo é permitido
if (!in_array($tipoMime, $tiposMimePermitidos)) {
$r['mensagem'] = "Tipo de arquivo inválido.";
http_response_code(400);
$r['mensagem'] = "Tipo de arquivo inválido. Apenas arquivos .xls e .xlsx são permitidos.";
echo json_encode($r);
exit;
}

// Sanitiza e gera um nome de arquivo único
// Obtém o nome e a extensão do arquivo
$file_name_original = basename($_FILES['arquivo']['name']);
$extensao = strtolower(pathinfo($file_name_original, PATHINFO_EXTENSION));

// Sanitiza o nome do arquivo para evitar problemas com caracteres especiais
$file_name_sanitized = preg_replace("/[^a-zA-Z0-9\._-]/", "_", pathinfo($file_name_original, PATHINFO_FILENAME));
$file_name = uniqid() . "_" . $file_name_sanitized . '.' . $extensao;

Expand All @@ -82,13 +66,6 @@
exit;
}

// Verifica se o arquivo é realmente uma imagem válida
if (!getimagesize($_FILES['arquivo']['tmp_name'])) {
$r['mensagem'] = "O arquivo enviado não é uma imagem válida.";
echo json_encode($r);
exit;
}

// Move o arquivo para o diretório seguro
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $destino)) {
$r['resultado'] = true;
Expand All @@ -97,5 +74,8 @@
} else {
$r['mensagem'] = "Erro ao mover o arquivo para o diretório de destino.";
}
}

echo (json_encode($r));
// Retorna a resposta em formato JSON
echo json_encode($r);
?>
3 changes: 3 additions & 0 deletions html/socio/sistema/controller/script/sistema.js
Original file line number Diff line number Diff line change
Expand Up @@ -963,7 +963,10 @@ $(document).ready(function(){

oReq.send();

}else{
request.abort();
}

}
}
// Upload de cobranças xlsx
Expand Down
2 changes: 1 addition & 1 deletion html/socio/sistema/tabelas/index.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?php
require_once '../../../config.php';
require_once '../../../../config.php';
header('Location: ' . WWW);
exit;

0 comments on commit 01182db

Please sign in to comment.