VYPR
Medium severity5.4NVD Advisory· Published May 27, 2026· Updated May 27, 2026

CVE-2026-45335

CVE-2026-45335

Description

WeGIA is a web manager for charitable institutions. Prior to 3.7.3, an Open Redirect vulnerability was identified in the /WeGIA/controle/control.php endpoint of the WeGIA application, specifically through the nextPage parameter when combined with metodo=listarTodos and nomeClasse=InternoControle. The application fails to validate or restrict the nextPage parameter, allowing attackers to redirect users to arbitrary external websites. This can be abused for phishing attacks, credential theft, malware distribution, and social engineering using the trusted WeGIA domain. This vulnerability is fixed in 3.7.3.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Open redirect vulnerability in WeGIA control.php via nextPage parameter allows phishing attacks; fixed in 3.7.3.

Vulnerability

An open redirect vulnerability exists in WeGIA versions prior to 3.7.3 in /WeGIA/controle/control.php when the metodo=listarTodos and nomeClasse=InternoControle parameters are supplied. The nextPage parameter is passed directly to a header('Location: ...') call in InternoControle.php without validation [1]. The middleware in MiddlewareDAO.php allows any authenticated user when the resource list is empty, as is the case for InternoControle [1].

Exploitation

An attacker can craft a URL such as /?metodo=listarTodos&nomeClasse=InternoControle&nextPage=https://evil.example.com and trick an authenticated user into clicking it. The user must be logged into WeGIA. No special privileges are required beyond having a valid session because the middleware grants access to all authenticated users for this class [1].

Impact

The attacker can redirect victims to an arbitrary external website, which can be used for phishing, credential theft, or malware distribution, leveraging the trust users have in the WeGIA domain [1].

Mitigation

The vulnerability is fixed in WeGIA version 3.7.3 [1]. Users should upgrade to this version or later. No workarounds are mentioned in the available references.

AI Insight generated on May 27, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected products

2

Patches

2
ed34f005139d

fix: Open Redirect Vulnerability [Security https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-x85f-76c9-qw3x]

https://github.com/labredescefetrj/wegiaGabrielPintoSouzaApr 27, 2026Fixed in 3.7.3via llm-release-walk
2 files changed · +367 391
  • controle/InternoControle.php+117 106 modified
    @@ -1,100 +1,106 @@
     <?php
    +if (session_status() === PHP_SESSION_NONE) {
    +    session_start();
    +}
     
     error_reporting(0);
    -ini_set('display_errors', 0 );
    +ini_set('display_errors', 0);
     
     require_once '../classes/Interno.php';
    +require_once dirname(__FILE__, 2) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'Util.php';
     require_once '../dao/InternoDAO.php';
     require_once '../classes/Documento.php';
     require_once '../dao/DocumentoDAO.php';
     require_once 'DocumentoControle.php';
     include_once '../classes/Cache.php';
     
    -require_once ROOT."/controle/InternoControle.php";
    -require_once ROOT."/controle/FuncionarioControle.php";
    +require_once ROOT . "/controle/InternoControle.php";
    +require_once ROOT . "/controle/FuncionarioControle.php";
     $listaInternos = new InternoControle();
     $listaInternos->listarTodos2();
     
    -class InternoControle 
    +class InternoControle
     {
    -	public function formatoDataYMD($data)
    -    	{
    -        	$data_arr = explode("/", $data);
    -        
    -        	$datac = $data_arr[2] . '-' . $data_arr[1] . '-' . $data_arr[0];
    -        
    -               return $datac;
    -    	}
    -   public function verificar(){
    +    //OpenRedirect nos métodos
    +    public function formatoDataYMD($data)
    +    {
    +        $data_arr = explode("/", $data);
    +
    +        $datac = $data_arr[2] . '-' . $data_arr[1] . '-' . $data_arr[0];
    +
    +        return $datac;
    +    }
    +    public function verificar()
    +    {
             extract($_REQUEST);
    -        session_start();
    -        if((!isset($nome)) || (empty($nome))){
    +
    +        if ((!isset($nome)) || (empty($nome))) {
                 $msg = "Nome do interno não informado. Por favor, informe um nome!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if((!isset($sobrenome)) || (empty($sobrenome))){
    +        if ((!isset($sobrenome)) || (empty($sobrenome))) {
                 $msg = "Sobrenome do interno não informado. Por favor, informe um sobrenome!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if((!isset($sexo)) || (empty($sexo))){
    +        if ((!isset($sexo)) || (empty($sexo))) {
                 $msg .= "Sexo do interno não informado. Por favor, informe um sexo!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if((!isset($nascimento)) || (empty($nascimento))){
    +        if ((!isset($nascimento)) || (empty($nascimento))) {
                 $msg .= "Data de nascimento do interno não informado. Por favor, informe uma data de nascimento!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if(isset($naoPossuiCpf))
    -        {
    +        if (isset($naoPossuiCpf)) {
                 $internos = $_SESSION['internos2'];
    -            $j=0;
    -            for($i=0; $i<count($internos); $i++)
    -            {
    -                if($nome==$internos[$i]['nome'])
    -                {
    +            $j = 0;
    +            for ($i = 0; $i < count($internos); $i++) {
    +                if ($nome == $internos[$i]['nome']) {
                         $j++;
                     }
                 }
    -            if($j==0)
    -            {
    -                $numeroCPF = $nome."ni";
    -            }
    -            else
    -            {
    -                $numeroCPF = $nome.$j."ni";
    +            if ($j == 0) {
    +                $numeroCPF = $nome . "ni";
    +            } else {
    +                $numeroCPF = $nome . $j . "ni";
                 }
    -        }
    -        elseif((!isset($numeroCPF)) || (empty($numeroCPF))){
    +        } elseif ((!isset($numeroCPF)) || (empty($numeroCPF))) {
                 $msg .= "CPF do interno não informado. Por favor, informe um CPF!";
    -            header('Location: ../html/atendido/Cadastro_atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_atendido.php?msg=' . $msg);
             }
    -            $telefone='';
    -            $senha='null';
    -            $numeroCPF=str_replace(".", '', $numeroCPF);
    -            $numeroCPF=str_replace("-", "", $numeroCPF);
    -            $interno = new Interno($numeroCPF,$nome,$sobrenome,$sexo,$nascimento,'','','','','','','',$telefone,'','','','','','','','','');
    -           
    -            return $interno;
    +        $telefone = '';
    +        $senha = 'null';
    +        $numeroCPF = str_replace(".", '', $numeroCPF);
    +        $numeroCPF = str_replace("-", "", $numeroCPF);
    +        $interno = new Interno($numeroCPF, $nome, $sobrenome, $sexo, $nascimento, '', '', '', '', '', '', '', $telefone, '', '', '', '', '', '', '', '', '');
    +
    +        return $interno;
    +    }
    +
    +    public function listarTodos($redirect = true)
    +    {
    +        try {
    +            $internoDAO = new InternoDAO();
    +            $internos = $internoDAO->listarTodos();
    +
    +            $_SESSION['internos'] = $internos;
    +            if ($redirect) {
    +                header('Location: ' . '../html/informacao_interno.php');
    +            }
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
    -    
    -    public function listarTodos(){
    -        extract($_REQUEST);
    -        $internoDAO= new InternoDAO();
    -        $internos = $internoDAO->listarTodos();
    -        session_start();
    -        $_SESSION['internos']=$internos;
    -        header('Location: '.$nextPage);
         }
     
    -    public function listarTodos2(){
    -        extract($_REQUEST);
    -        $internoDAO= new InternoDAO();
    -        $internos = $internoDAO->listarTodos2();
    -        if (session_status() !== PHP_SESSION_ACTIVE)
    -        {
    -            session_start();
    +    public function listarTodos2()
    +    {
    +        try {
    +            $internoDAO = new InternoDAO();
    +            $internos = $internoDAO->listarTodos2();
    +
    +            $_SESSION['internos2'] = $internos;
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
    -        $_SESSION['internos2']=$internos;
         }
     
         public function listarUm()
    @@ -104,73 +110,78 @@ public function listarUm()
             $infInterno = $cache->read($id);
             if (!$infInterno) {
                 try {
    -                $internoDAO=new InternoDAO();
    -                $infInterno=$internoDAO->listar($id);
    -                session_start();
    -                $_SESSION['interno']=$infInterno;
    +                $internoDAO = new InternoDAO();
    +                $infInterno = $internoDAO->listar($id);
    +
    +                $_SESSION['interno'] = $infInterno;
                     $cache->save($id, $infInterno, '15 seconds');
    -                header('Location:'.$nextPage);
    -            } catch (PDOException $e) {
    -                echo $e->getMessage();
    +                header('Location:' . '../html/informacao_interno.php');
    +            } catch (Exception $e) {
    +                Util::tratarException($e);
                 }
    +        } else {
    +            header('Location:' . '../html/informacao_interno.php');
             }
    -        else{
    -            header('Location:'.$nextPage);
    -        }
    -        
         }
     
    -    public function listarCpf(){
    -        extract($_REQUEST);
    -        $internosDAO = new InternoDAO();
    -        $internoscpf = $internosDAO->listarCPF();
    -        $_SESSION['cpf_interno']=$internoscpf;
    +    public function listarCpf()
    +    {
    +        try {
    +            $internosDAO = new InternoDAO();
    +            $internoscpf = $internosDAO->listarCPF();
    +            $_SESSION['cpf_interno'] = $internoscpf;
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
    +        }
         }
     
    -    public function comprimir($documParaCompressao){
    -			$documento_zip = gzcompress($documParaCompressao);
    -			return $documento_zip;
    +    public function comprimir($documParaCompressao)
    +    {
    +        $documento_zip = gzcompress($documParaCompressao);
    +        return $documento_zip;
         }
    -        
    -    public function incluir(){
    -        $interno = $this->verificar();
    -        $intDAO = new AtendidoDAO();
    -        $docDAO = new DocumentoDAO();
    -        try{
    -            $idPessoa=$intDAO->incluir($interno, $interno->getCpf());
    -            $_SESSION['msg']="Interno cadastrado com sucesso";
    -            $_SESSION['proxima']="Cadastrar outro interno";
    -            $_SESSION['link']="../html/atendido/Cadastro_Atendido.php";
    +
    +    public function incluir()
    +    {
    +        try {
    +            $interno = $this->verificar();
    +            $intDAO = new AtendidoDAO();
    +            $docDAO = new DocumentoDAO();
    +            $idPessoa = $intDAO->incluir($interno, $interno->getCpf());
    +            $_SESSION['msg'] = "Interno cadastrado com sucesso";
    +            $_SESSION['proxima'] = "Cadastrar outro interno";
    +            $_SESSION['link'] = "../html/atendido/Cadastro_Atendido.php";
                 header("Location: ../html/sucesso.php");
    -        } catch (PDOException $e){
    -            $msg= "Não foi possível registrar o interno <form> <input type='button' value='Voltar' onClick='history.go(-1)'> </form>"."<br>".$e->getMessage();
    -            echo $msg;
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
         }
         public function alterar()
         {
    -        extract($_REQUEST);
    -        $interno=$this->verificar();
    -        $interno->setIdInterno($idInterno);
    -        $AtendidoDAO=new AtendidoDAO();
             try {
    +            extract($_REQUEST);
    +            $interno = $this->verificar();
    +            $interno->setIdInterno($idInterno);
    +            $AtendidoDAO = new AtendidoDAO();
    +
                 $AtendidoDAO->alterar($interno);
    -            header("Location: ../html/Profile_Atendido.php?id=".$idInterno);
    -        } catch (PDOException $e) {
    -            echo $e->getMessage();
    +            header("Location: ../html/Profile_Atendido.php?id=" . $idInterno);
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
    -
         }
     
         public function excluir()
         {
    -        extract($_REQUEST);
    -        $AtendidoDAO=new AtendidoDAO();
             try {
    +            extract($_REQUEST);
    +            $AtendidoDAO = new AtendidoDAO();
    +
                 $AtendidoDAO->excluir($id);
    -            header("Location:../controle/control.php?metodo=listarTodos&nomeClasse=InternoControle&nextPage=../html/Informacao_Atendido.php");
    +            $this->listarTodos(false);
    +            header("Location: ../html/Informacao_Atendido.php");
             } catch (Exception $e) {
    -            echo $e->getMessage();
    +            Util::tratarException($e);
             }
         }
     }
    
  • dao/InternoDAO.php+250 285 modified
    @@ -8,329 +8,294 @@ class InternoDAO
         public function formatoDataDMY($data)
         {
             $data_arr = explode("-", $data);
    -        
    +
             $datad = $data_arr[2] . '/' . $data_arr[1] . '/' . $data_arr[0];
    -        
    +
             return $datad;
         }
    -	public function incluir($interno)
    -    {        
    -        try {
    -            $sql = 'call cadinterno(:nome,:sobrenome,:cpf,:senha,:sexo,:telefone,:data_nascimento,:imagem,:cep,:estado,:cidade,:bairro,:logradouro,:numero_endereco,:complemento,:ibge,:registro_geral,:orgao_emissor,:data_expedicao,:nome_pai,:nome_mae,:tipo_sanguineo,:nome_contato_urgente,:telefone_contato_urgente_1,:telefone_contato_urgente_2,:telefone_contato_urgente_3,:observacao,:certidao,:curatela,:inss,:loas,:bpc,:funrural,:saf,:sus,:certidao_casamento,:ctps,:titulo)';
    -            $sql = str_replace("'", "\'", $sql);            
    -            $pdo = Conexao::connect();
    -            $stmt = $pdo->prepare($sql);
    -            $senha=$interno->getSenha();
    -            $nome=$interno->getNome();
    -            $sobrenome=$interno->getSobrenome();
    -            $cpf=$interno->getCpf();
    -            $sexo=$interno->getSexo();
    -            $telefone=$interno->getTelefone();
    -            $nascimento=$interno->getDataNascimento();
    -            $imagem=$interno->getImagem();
    -            $cep=$interno->getCep();
    -            $cidade=$interno->getCidade();
    -            $bairro=$interno->getBairro();
    -            $logradouro=$interno->getLogradouro();
    -            $numeroEndereco=$interno->getNumeroEndereco();
    -            $complemento=$interno->getComplemento();
    -            $rg=$interno->getRegistroGeral();
    -            $orgaoEmissor=$interno->getOrgaoEmissor();
    -            $nomePai=$interno->getNomePai();        
    -            $nomeMae=$interno->getNomeMae();
    -            $sangue=$interno->getTipoSanguineo();
    -            $nomeContatoUrgente=$interno->getNomeContatoUrgente();
    -            $telefone1=$interno->getTelefoneContatoUrgente1();
    -            $telefone2=$interno->getTelefoneContatoUrgente2();
    -            $telefone3=$interno->getTelefoneContatoUrgente3();
    -            $observacao=$interno->getObservacao();
    -            $ibge=$interno->getIbge();
    -            $dataExpedicao=$interno->getDataExpedicao();
    -            $certidao=$interno->getCertidaoNascimento();
    -            $curatela=$interno->getCuratela();
    -            $inss=$interno->getInss();
    -            $loas=$interno->getLoas();
    -            $bpc=$interno->getBpc();
    -            $funrural=$interno->getFunrural();
    -            $saf=$interno->getSaf();
    -            $sus=$interno->getSus();
    -            $certidaoCasamento=$interno->getCertidaoCasamento();
    -            $ctps=$interno->getCtps();
    -            $titulo=$interno->getTitulo();
    -            $estado=$interno->getEstado();
    -
    -            $stmt->bindParam(':senha',$senha);
    -            $stmt->bindParam(':nome',$nome);
    -            $stmt->bindParam(':sobrenome',$sobrenome);
    -            $stmt->bindParam(':cpf',$cpf);
    -            $stmt->bindParam(':sexo',$sexo);
    -            $stmt->bindParam(':telefone',$telefone);
    -            $stmt->bindParam(':data_nascimento',$nascimento);
    -            $stmt->bindParam(':imagem',$imagem);        
    -            $stmt->bindParam(':cep',$cep);
    -            $stmt->bindParam(':estado',$estado);
    -            $stmt->bindParam(':cidade',$cidade);
    -            $stmt->bindParam(':bairro',$bairro);
    -            $stmt->bindParam(':logradouro',$logradouro);
    -            $stmt->bindParam(':numero_endereco',$numeroEndereco);
    -            $stmt->bindParam(':complemento',$complemento);
    -            $stmt->bindParam(':registro_geral',$rg);
    -            $stmt->bindParam(':orgao_emissor',$orgaoEmissor);
    -            $stmt->bindParam(':data_expedicao',$dataExpedicao);
    -            $stmt->bindParam(':nome_pai',$nomePai);        
    -            $stmt->bindParam(':nome_mae',$nomeMae);
    -            $stmt->bindParam(':tipo_sanguineo',$sangue);
    -            $stmt->bindParam(':nome_contato_urgente',$nomeContatoUrgente);
    -            $stmt->bindParam(':telefone_contato_urgente_1',$telefone1);
    -            $stmt->bindParam(':telefone_contato_urgente_2',$telefone2);
    -            $stmt->bindParam(':telefone_contato_urgente_3',$telefone3);
    -            $stmt->bindParam(':observacao',$observacao);
    -            $stmt->bindParam(':ibge',$ibge);
    -            $stmt->bindParam(':certidao',$certidao);
    -            $stmt->bindParam(':curatela',$curatela);
    -            $stmt->bindParam(':inss',$inss);
    -            $stmt->bindParam(':loas',$loas);
    -            $stmt->bindParam(':bpc',$bpc);
    -            $stmt->bindParam(':funrural',$funrural);
    -            $stmt->bindParam(':saf',$saf);
    -            $stmt->bindParam(':sus',$sus);
    -            $stmt->bindParam(':certidao_casamento',$certidaoCasamento);
    -            $stmt->bindParam(':ctps',$ctps);
    -            $stmt->bindParam(':titulo',$titulo);
    -            $stmt->execute();
    -            while($linha = $stmt->fetch(PDO::FETCH_ASSOC)){
    -                $idPessoa=$linha['MAX(id_pessoa)'];
    -            }
    -            return $idPessoa;
    +    public function incluir($interno)
    +    {
    +        $sql = 'call cadinterno(:nome,:sobrenome,:cpf,:senha,:sexo,:telefone,:data_nascimento,:imagem,:cep,:estado,:cidade,:bairro,:logradouro,:numero_endereco,:complemento,:ibge,:registro_geral,:orgao_emissor,:data_expedicao,:nome_pai,:nome_mae,:tipo_sanguineo,:nome_contato_urgente,:telefone_contato_urgente_1,:telefone_contato_urgente_2,:telefone_contato_urgente_3,:observacao,:certidao,:curatela,:inss,:loas,:bpc,:funrural,:saf,:sus,:certidao_casamento,:ctps,:titulo)';
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $stmt = $pdo->prepare($sql);
    +        $senha = $interno->getSenha();
    +        $nome = $interno->getNome();
    +        $sobrenome = $interno->getSobrenome();
    +        $cpf = $interno->getCpf();
    +        $sexo = $interno->getSexo();
    +        $telefone = $interno->getTelefone();
    +        $nascimento = $interno->getDataNascimento();
    +        $imagem = $interno->getImagem();
    +        $cep = $interno->getCep();
    +        $cidade = $interno->getCidade();
    +        $bairro = $interno->getBairro();
    +        $logradouro = $interno->getLogradouro();
    +        $numeroEndereco = $interno->getNumeroEndereco();
    +        $complemento = $interno->getComplemento();
    +        $rg = $interno->getRegistroGeral();
    +        $orgaoEmissor = $interno->getOrgaoEmissor();
    +        $nomePai = $interno->getNomePai();
    +        $nomeMae = $interno->getNomeMae();
    +        $sangue = $interno->getTipoSanguineo();
    +        $nomeContatoUrgente = $interno->getNomeContatoUrgente();
    +        $telefone1 = $interno->getTelefoneContatoUrgente1();
    +        $telefone2 = $interno->getTelefoneContatoUrgente2();
    +        $telefone3 = $interno->getTelefoneContatoUrgente3();
    +        $observacao = $interno->getObservacao();
    +        $ibge = $interno->getIbge();
    +        $dataExpedicao = $interno->getDataExpedicao();
    +        $certidao = $interno->getCertidaoNascimento();
    +        $curatela = $interno->getCuratela();
    +        $inss = $interno->getInss();
    +        $loas = $interno->getLoas();
    +        $bpc = $interno->getBpc();
    +        $funrural = $interno->getFunrural();
    +        $saf = $interno->getSaf();
    +        $sus = $interno->getSus();
    +        $certidaoCasamento = $interno->getCertidaoCasamento();
    +        $ctps = $interno->getCtps();
    +        $titulo = $interno->getTitulo();
    +        $estado = $interno->getEstado();
     
    -        }catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela interno = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    +        $stmt->bindParam(':senha', $senha);
    +        $stmt->bindParam(':nome', $nome);
    +        $stmt->bindParam(':sobrenome', $sobrenome);
    +        $stmt->bindParam(':cpf', $cpf);
    +        $stmt->bindParam(':sexo', $sexo);
    +        $stmt->bindParam(':telefone', $telefone);
    +        $stmt->bindParam(':data_nascimento', $nascimento);
    +        $stmt->bindParam(':imagem', $imagem);
    +        $stmt->bindParam(':cep', $cep);
    +        $stmt->bindParam(':estado', $estado);
    +        $stmt->bindParam(':cidade', $cidade);
    +        $stmt->bindParam(':bairro', $bairro);
    +        $stmt->bindParam(':logradouro', $logradouro);
    +        $stmt->bindParam(':numero_endereco', $numeroEndereco);
    +        $stmt->bindParam(':complemento', $complemento);
    +        $stmt->bindParam(':registro_geral', $rg);
    +        $stmt->bindParam(':orgao_emissor', $orgaoEmissor);
    +        $stmt->bindParam(':data_expedicao', $dataExpedicao);
    +        $stmt->bindParam(':nome_pai', $nomePai);
    +        $stmt->bindParam(':nome_mae', $nomeMae);
    +        $stmt->bindParam(':tipo_sanguineo', $sangue);
    +        $stmt->bindParam(':nome_contato_urgente', $nomeContatoUrgente);
    +        $stmt->bindParam(':telefone_contato_urgente_1', $telefone1);
    +        $stmt->bindParam(':telefone_contato_urgente_2', $telefone2);
    +        $stmt->bindParam(':telefone_contato_urgente_3', $telefone3);
    +        $stmt->bindParam(':observacao', $observacao);
    +        $stmt->bindParam(':ibge', $ibge);
    +        $stmt->bindParam(':certidao', $certidao);
    +        $stmt->bindParam(':curatela', $curatela);
    +        $stmt->bindParam(':inss', $inss);
    +        $stmt->bindParam(':loas', $loas);
    +        $stmt->bindParam(':bpc', $bpc);
    +        $stmt->bindParam(':funrural', $funrural);
    +        $stmt->bindParam(':saf', $saf);
    +        $stmt->bindParam(':sus', $sus);
    +        $stmt->bindParam(':certidao_casamento', $certidaoCasamento);
    +        $stmt->bindParam(':ctps', $ctps);
    +        $stmt->bindParam(':titulo', $titulo);
    +        $stmt->execute();
    +        while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
    +            $idPessoa = $linha['MAX(id_pessoa)'];
             }
    +        return $idPessoa;
         }
     
         // excluir
         public function excluir($idinterno)
         {
    -        try {
    -            $sql = 'call excluirinterno(:idi)';
    -            $sql = str_replace("'", "\'", $sql);
    -            $pdo = Conexao::connect();
    -            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    -            
    -            $stmt = $pdo->prepare($sql);
    -            
    -            $stmt->bindParam(':idi', $idinterno);
    -            
    -            $stmt->execute();
    -        } catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela pessoas = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    -        }
    +        $sql = 'call excluirinterno(:idi)';
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    +
    +        $stmt = $pdo->prepare($sql);
    +
    +        $stmt->bindParam(':idi', $idinterno);
    +
    +        $stmt->execute();
         }
     
         public function alterarImagem($interno)
         {
    -        try {
    -            $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set imagem=:imagem where id_interno=:id_interno';
    -            
    -           $sql = str_replace("'", "\'", $sql);
    -            $pdo = Conexao::connect();
    -            $stmt = $pdo->prepare($sql);
    -            
    -            $stmt = $pdo->prepare($sql);
    -            $imagem=$interno->getImagem();
    -            $id_interno=$interno->getIdInterno();
    +        $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set imagem=:imagem where id_interno=:id_interno';
     
    -            $stmt->bindParam(':imagem',$imagem);
    -            $stmt->bindParam(':id_interno',$id_interno);
    -            $stmt->execute();
    -        } catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela pessoas = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    -        }
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $stmt = $pdo->prepare($sql);
    +
    +        $stmt = $pdo->prepare($sql);
    +        $imagem = $interno->getImagem();
    +        $id_interno = $interno->getIdInterno();
    +
    +        $stmt->bindParam(':imagem', $imagem);
    +        $stmt->bindParam(':id_interno', $id_interno);
    +        $stmt->execute();
         }
     
         // Editar
         public function alterar($interno)
         {
    -        try {
    -            $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set p.senha=:senha,p.nome=:nome, p.sobrenome=:sobrenome,p.cpf=:cpf,p.sexo=:sexo,p.telefone=:telefone,p.data_nascimento=:data_nascimento,p.imagem=:imagem,p.cep=:cep,p.estado=:estado,p.cidade=:cidade,p.bairro=:bairro,p.logradouro=:logradouro,p.numero_endereco=:numero_endereco,p.complemento=:complemento,p.ibge=:ibge,p.registro_geral=:registro_geral,p.orgao_emissor=:orgao_emissor,p.data_expedicao=:data_expedicao,p.nome_pai=:nome_pai,p.nome_mae=:nome_mae,p.tipo_sanguineo=:tipo_sanguineo,i.nome_contato_urgente=:nome_contato_urgente,i.telefone_contato_urgente_1=:telefone_contato_urgente_1,i.telefone_contato_urgente_2=:telefone_contato_urgente_2,i.telefone_contato_urgente_3=:telefone_contato_urgente_3,i.observacao=:observacao,i.certidao_nascimento=:certidao,i.curatela=:curatela,i.inss=:inss,i.loas=:loas,i.bpc=:bpc,i.funrural=:funrural,i.saf=:saf,i.sus=:sus,i.certidao_casamento=:certidao_casamento,i.ctps=:ctps,i.titulo=:titulo where i.id_interno=:id_interno';
    -            
    -            $sql = str_replace("'", "\'", $sql);
    -            $pdo = Conexao::connect();
    -            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    -            
    -            $stmt = $pdo->prepare($sql);
    -            $certidao_casamento=$interno->getCertidaoCasamento();
    -            $ctps=$interno->getCtps();
    -            $titulo=$interno->getTitulo();
    -            $nome=$interno->getNome();
    -            $sobrenome=$interno->getsobrenome();
    -            $cpf=$interno->getCpf();
    -            $sexo=$interno->getSexo();
    -            $telefone=$interno->getTelefone();
    -            $nascimento=$interno->getDataNascimento();
    -            $imagem=$interno->getImagem();
    -            $cep=$interno->getCep();
    -            $cidade=$interno->getCidade();
    -            $bairro=$interno->getBairro();
    -            $logradouro=$interno->getLogradouro();
    -            $numeroEndereco=$interno->getNumeroEndereco();
    -            $complemento=$interno->getComplemento();
    -            $rg=$interno->getRegistroGeral();
    -            $orgaoEmissor=$interno->getOrgaoEmissor();
    -            $nomePai=$interno->getNomePai();        
    -            $nomeMae=$interno->getNomeMae();
    -            $sangue=$interno->getTipoSanguineo();
    -            $nomeContatoUrgente=$interno->getNomeContatoUrgente();
    -            $telefone1=$interno->getTelefoneContatoUrgente1();
    -            $telefone2=$interno->getTelefoneContatoUrgente2();
    -            $telefone3=$interno->getTelefoneContatoUrgente3();
    -            $ibge=$interno->getIbge();
    -            $dataExpedicao=$interno->getDataExpedicao();
    -            $certidao=$interno->getCertidaoNascimento();
    -            $curatela=$interno->getCuratela();
    -            $inss=$interno->getInss();
    -            $loas=$interno->getLoas();
    -            $bpc=$interno->getBpc();
    -            $funrural=$interno->getFunrural();
    -            $saf=$interno->getSaf();
    -            $sus=$interno->getSus();
    -            $idInterno=$interno->getIdInterno();
    -            $estado=$interno->getEstado();
    -            $observacao=$interno->getObservacao();
    -            
    -            $stmt->bindParam(':id_interno',$idInterno);
    -            $stmt->bindParam(':senha',$senha);
    -            $stmt->bindParam(':nome',$nome);
    -            $stmt->bindParam(':sobrenome',$sobrenome);
    -            $stmt->bindParam(':cpf',$cpf);
    -            $stmt->bindParam(':sexo',$sexo);
    -            $stmt->bindParam(':telefone',$telefone);
    -            $stmt->bindParam(':data_nascimento',$nascimento);
    -            $stmt->bindParam(':imagem',$imagem);        
    -            $stmt->bindParam(':cep',$cep);
    -            $stmt->bindParam(':estado',$estado);
    -            $stmt->bindParam(':cidade',$cidade);
    -            $stmt->bindParam(':bairro',$bairro);
    -            $stmt->bindParam(':logradouro',$logradouro);
    -            $stmt->bindParam(':numero_endereco',$numeroEndereco);
    -            $stmt->bindParam(':complemento',$complemento);
    -            $stmt->bindParam(':registro_geral',$rg);
    -            $stmt->bindParam(':orgao_emissor',$orgaoEmissor);
    -            $stmt->bindParam(':data_expedicao',$dataExpedicao);
    -            $stmt->bindParam(':nome_pai',$nomePai);        
    -            $stmt->bindParam(':nome_mae',$nomeMae);
    -            $stmt->bindParam(':tipo_sanguineo',$sangue);
    -            $stmt->bindParam(':nome_contato_urgente',$nomeContatoUrgente);
    -            $stmt->bindParam(':telefone_contato_urgente_1',$telefone1);
    -            $stmt->bindParam(':telefone_contato_urgente_2',$telefone2);
    -            $stmt->bindParam(':telefone_contato_urgente_3',$telefone3);
    -            $stmt->bindParam(':observacao',$observacao);
    -            $stmt->bindParam(':ibge',$ibge);
    -            $stmt->bindParam(':certidao',$certidao);
    -            $stmt->bindParam(':curatela',$curatela);
    -            $stmt->bindParam(':inss',$inss);
    -            $stmt->bindParam(':loas',$loas);
    -            $stmt->bindParam(':bpc',$bpc);
    -            $stmt->bindParam(':funrural',$funrural);
    -            $stmt->bindParam(':saf',$saf);
    -            $stmt->bindParam(':sus',$sus);
    -            $stmt->bindParam(':certidao_casamento',$certidao_casamento);
    -            $stmt->bindParam(':ctps',$ctps);
    -            $stmt->bindParam(':titulo',$titulo);
    -            $stmt->execute();
    -        } catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela pessoas = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    -        }
    -    }
    -    public function listarTodos(){
    +        $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set p.senha=:senha,p.nome=:nome, p.sobrenome=:sobrenome,p.cpf=:cpf,p.sexo=:sexo,p.telefone=:telefone,p.data_nascimento=:data_nascimento,p.imagem=:imagem,p.cep=:cep,p.estado=:estado,p.cidade=:cidade,p.bairro=:bairro,p.logradouro=:logradouro,p.numero_endereco=:numero_endereco,p.complemento=:complemento,p.ibge=:ibge,p.registro_geral=:registro_geral,p.orgao_emissor=:orgao_emissor,p.data_expedicao=:data_expedicao,p.nome_pai=:nome_pai,p.nome_mae=:nome_mae,p.tipo_sanguineo=:tipo_sanguineo,i.nome_contato_urgente=:nome_contato_urgente,i.telefone_contato_urgente_1=:telefone_contato_urgente_1,i.telefone_contato_urgente_2=:telefone_contato_urgente_2,i.telefone_contato_urgente_3=:telefone_contato_urgente_3,i.observacao=:observacao,i.certidao_nascimento=:certidao,i.curatela=:curatela,i.inss=:inss,i.loas=:loas,i.bpc=:bpc,i.funrural=:funrural,i.saf=:saf,i.sus=:sus,i.certidao_casamento=:certidao_casamento,i.ctps=:ctps,i.titulo=:titulo where i.id_interno=:id_interno';
     
    -        try{
    -            $internos=array();
    -            $pdo = Conexao::connect();
    -            $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    -            $produtos = Array();
    -            $x=0;
    -            while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
    -                if ($linha['cpf']==="Não informado") {
    -                    $internos[$x]=array('cpf'=>$linha['cpf'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                else{
    -                $internos[$x]=array('cpf'=>mask($linha['cpf'],'###.###.###-##'),'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                $x++;
    -            }
    -            } catch (PDOException $e){
    -                echo 'Error:' . $e->getMessage();
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    +
    +        $stmt = $pdo->prepare($sql);
    +        $certidao_casamento = $interno->getCertidaoCasamento();
    +        $ctps = $interno->getCtps();
    +        $titulo = $interno->getTitulo();
    +        $nome = $interno->getNome();
    +        $sobrenome = $interno->getsobrenome();
    +        $cpf = $interno->getCpf();
    +        $sexo = $interno->getSexo();
    +        $telefone = $interno->getTelefone();
    +        $nascimento = $interno->getDataNascimento();
    +        $imagem = $interno->getImagem();
    +        $cep = $interno->getCep();
    +        $cidade = $interno->getCidade();
    +        $bairro = $interno->getBairro();
    +        $logradouro = $interno->getLogradouro();
    +        $numeroEndereco = $interno->getNumeroEndereco();
    +        $complemento = $interno->getComplemento();
    +        $rg = $interno->getRegistroGeral();
    +        $orgaoEmissor = $interno->getOrgaoEmissor();
    +        $nomePai = $interno->getNomePai();
    +        $nomeMae = $interno->getNomeMae();
    +        $sangue = $interno->getTipoSanguineo();
    +        $nomeContatoUrgente = $interno->getNomeContatoUrgente();
    +        $telefone1 = $interno->getTelefoneContatoUrgente1();
    +        $telefone2 = $interno->getTelefoneContatoUrgente2();
    +        $telefone3 = $interno->getTelefoneContatoUrgente3();
    +        $ibge = $interno->getIbge();
    +        $dataExpedicao = $interno->getDataExpedicao();
    +        $certidao = $interno->getCertidaoNascimento();
    +        $curatela = $interno->getCuratela();
    +        $inss = $interno->getInss();
    +        $loas = $interno->getLoas();
    +        $bpc = $interno->getBpc();
    +        $funrural = $interno->getFunrural();
    +        $saf = $interno->getSaf();
    +        $sus = $interno->getSus();
    +        $idInterno = $interno->getIdInterno();
    +        $estado = $interno->getEstado();
    +        $observacao = $interno->getObservacao();
    +
    +        $stmt->bindParam(':id_interno', $idInterno);
    +        $stmt->bindParam(':senha', $senha);
    +        $stmt->bindParam(':nome', $nome);
    +        $stmt->bindParam(':sobrenome', $sobrenome);
    +        $stmt->bindParam(':cpf', $cpf);
    +        $stmt->bindParam(':sexo', $sexo);
    +        $stmt->bindParam(':telefone', $telefone);
    +        $stmt->bindParam(':data_nascimento', $nascimento);
    +        $stmt->bindParam(':imagem', $imagem);
    +        $stmt->bindParam(':cep', $cep);
    +        $stmt->bindParam(':estado', $estado);
    +        $stmt->bindParam(':cidade', $cidade);
    +        $stmt->bindParam(':bairro', $bairro);
    +        $stmt->bindParam(':logradouro', $logradouro);
    +        $stmt->bindParam(':numero_endereco', $numeroEndereco);
    +        $stmt->bindParam(':complemento', $complemento);
    +        $stmt->bindParam(':registro_geral', $rg);
    +        $stmt->bindParam(':orgao_emissor', $orgaoEmissor);
    +        $stmt->bindParam(':data_expedicao', $dataExpedicao);
    +        $stmt->bindParam(':nome_pai', $nomePai);
    +        $stmt->bindParam(':nome_mae', $nomeMae);
    +        $stmt->bindParam(':tipo_sanguineo', $sangue);
    +        $stmt->bindParam(':nome_contato_urgente', $nomeContatoUrgente);
    +        $stmt->bindParam(':telefone_contato_urgente_1', $telefone1);
    +        $stmt->bindParam(':telefone_contato_urgente_2', $telefone2);
    +        $stmt->bindParam(':telefone_contato_urgente_3', $telefone3);
    +        $stmt->bindParam(':observacao', $observacao);
    +        $stmt->bindParam(':ibge', $ibge);
    +        $stmt->bindParam(':certidao', $certidao);
    +        $stmt->bindParam(':curatela', $curatela);
    +        $stmt->bindParam(':inss', $inss);
    +        $stmt->bindParam(':loas', $loas);
    +        $stmt->bindParam(':bpc', $bpc);
    +        $stmt->bindParam(':funrural', $funrural);
    +        $stmt->bindParam(':saf', $saf);
    +        $stmt->bindParam(':sus', $sus);
    +        $stmt->bindParam(':certidao_casamento', $certidao_casamento);
    +        $stmt->bindParam(':ctps', $ctps);
    +        $stmt->bindParam(':titulo', $titulo);
    +        $stmt->execute();
    +    }
    +    public function listarTodos()
    +    {
    +        $internos = array();
    +        $pdo = Conexao::connect();
    +        $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    +        $produtos = array();
    +        $x = 0;
    +        while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
    +            if ($linha['cpf'] === "Não informado") {
    +                $internos[$x] = array('cpf' => $linha['cpf'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
    +            } else {
    +                $internos[$x] = array('cpf' => mask($linha['cpf'], '###.###.###-##'), 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
                 }
    -            return json_encode($internos);
    +            $x++;
             }
     
    +        return json_encode($internos);
    +    }
     
    -    public function listarTodos2(){
     
    -        try{
    -            $internos=array();
    -            $pdo = Conexao::connect();
    -            $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    -            $produtos = Array();
    -            $x=0;
    -            while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
    -                if ($linha['cpf']==="Não informado") {
    -                    $internos[$x]=array('cpf'=>$linha['cpf'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                else{
    -                $internos[$x]=array('cpf'=>mask($linha['cpf'],'###.###.###-##'),'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                $x++;
    -            }
    -            } catch (PDOException $e){
    -                echo 'Error:' . $e->getMessage();
    +    public function listarTodos2()
    +    {
    +        $internos = array();
    +        $pdo = Conexao::connect();
    +        $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    +        $produtos = array();
    +        $x = 0;
    +        while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
    +            if ($linha['cpf'] === "Não informado") {
    +                $internos[$x] = array('cpf' => $linha['cpf'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
    +            } else {
    +                $internos[$x] = array('cpf' => mask($linha['cpf'], '###.###.###-##'), 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
                 }
    -            return $internos;
    +            $x++;
             }
     
    -    public function listar($id){
    -        try{
    -            echo $id;
    -            $pdo = Conexao::connect();
    -            $sql = "SELECT p.imagem,p.nome,p.sobrenome,p.cpf, p.senha, p.sexo, p.telefone,p.data_nascimento, p.cep,p.cidade,p.bairro,p.logradouro,p.numero_endereco,p.complemento,p.ibge,p.registro_geral,p.orgao_emissor,p.data_expedicao,p.nome_pai,p.nome_mae,p.tipo_sanguineo,i.nome_contato_urgente,i.telefone_contato_urgente_1,i.telefone_contato_urgente_2,i.telefone_contato_urgente_3,i.observacao,i.certidao_nascimento,i.curatela,i.inss,i.loas,i.bpc,i.funrural,i.saf,i.sus,i.id_interno,i.certidao_casamento,i.ctps,i.titulo,d.imgdoc,d.descricao,d.id_documento FROM pessoa p LEFT JOIN interno i ON p.id_pessoa = i.id_pessoa left join documento d on p.id_pessoa=d.id_pessoa WHERE i.id_interno=:id";
    -            $stmt = $pdo->prepare($sql);
    -            $stmt->bindParam(':id',$id);
    +        return $internos;
    +    }
     
    -            $stmt->execute();
    -            $interno=array();
    -            while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
    -                if ($linha['cpf']==="Não informado") {
    -                $interno[]=array('ctps'=>$linha['ctps'],'titulo'=>$linha['titulo'],'casamento'=>$linha['certidao_casamento'],'imagem'=>$linha['imagem'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'cpf'=>$linha['cpf'], 'senha'=>$linha['senha'], 'sexo'=>$linha['sexo'], 'telefone'=>$linha['telefone'],'data_nascimento'=>$linha['data_nascimento'], 'cep'=>$linha['cep'],'cidade'=>$linha['cidade'],'bairro'=>$linha['bairro'],'logradouro'=>$linha['logradouro'],'numero_endereco'=>$linha['numero_endereco'],'complemento'=>$linha['complemento'],'ibge'=>$linha['ibge'],'registro_geral'=>$linha['registro_geral'],'orgao_emissor'=>$linha['orgao_emissor'],'data_expedicao'=>$linha['data_expedicao'],'nome_pai'=>$linha['nome_pai'],'nome_mae'=>$linha['nome_mae'],'tipo_sanguineo'=>$linha['tipo_sanguineo'],'nome_contato_urgente'=>$linha['nome_contato_urgente'],'telefone_contato_urgente_1'=>$linha['telefone_contato_urgente_1'],'telefone_contato_urgente_2'=>$linha['telefone_contato_urgente_2'],'telefone_contato_urgente_3'=>$linha['telefone_contato_urgente_3'],'observacao'=>$linha['observacao'],'certidao'=>$linha['certidao_nascimento'],'curatela'=>$linha['curatela'],'inss'=>$linha['inss'],'loas'=>$linha['loas'],'bpc'=>$linha['bpc'],'funrural'=>$linha['funrural'],'saf'=>$linha['saf'],'sus'=>$linha['sus'],'idInterno'=>$linha['id_interno'],'imgdoc'=>$linha['imgdoc'],'descricao'=>$linha['descricao'],'id_documento'=>$linha['id_documento']);
    -            }
    -            else{
    -                $interno[]=array('ctps'=>$linha['ctps'],'titulo'=>$linha['titulo'],'casamento'=>$linha['certidao_casamento'],'imagem'=>$linha['imagem'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'cpf'=>mask($linha['cpf'],'###.###.###-##'), 'senha'=>$linha['senha'], 'sexo'=>$linha['sexo'], 'telefone'=>$linha['telefone'],'data_nascimento'=>$linha['data_nascimento'], 'cep'=>$linha['cep'],'cidade'=>$linha['cidade'],'bairro'=>$linha['bairro'],'logradouro'=>$linha['logradouro'],'numero_endereco'=>$linha['numero_endereco'],'complemento'=>$linha['complemento'],'ibge'=>$linha['ibge'],'registro_geral'=>$linha['registro_geral'],'orgao_emissor'=>$linha['orgao_emissor'],'data_expedicao'=>$linha['data_expedicao'],'nome_pai'=>$linha['nome_pai'],'nome_mae'=>$linha['nome_mae'],'tipo_sanguineo'=>$linha['tipo_sanguineo'],'nome_contato_urgente'=>$linha['nome_contato_urgente'],'telefone_contato_urgente_1'=>$linha['telefone_contato_urgente_1'],'telefone_contato_urgente_2'=>$linha['telefone_contato_urgente_2'],'telefone_contato_urgente_3'=>$linha['telefone_contato_urgente_3'],'observacao'=>$linha['observacao'],'certidao'=>$linha['certidao_nascimento'],'curatela'=>$linha['curatela'],'inss'=>$linha['inss'],'loas'=>$linha['loas'],'bpc'=>$linha['bpc'],'funrural'=>$linha['funrural'],'saf'=>$linha['saf'],'sus'=>$linha['sus'],'idInterno'=>$linha['id_interno'],'imgdoc'=>$linha['imgdoc'],'descricao'=>$linha['descricao'],'id_documento'=>$linha['id_documento']);
    +    public function listar($id)
    +    {
    +        echo $id;
    +        $pdo = Conexao::connect();
    +        $sql = "SELECT p.imagem,p.nome,p.sobrenome,p.cpf, p.senha, p.sexo, p.telefone,p.data_nascimento, p.cep,p.cidade,p.bairro,p.logradouro,p.numero_endereco,p.complemento,p.ibge,p.registro_geral,p.orgao_emissor,p.data_expedicao,p.nome_pai,p.nome_mae,p.tipo_sanguineo,i.nome_contato_urgente,i.telefone_contato_urgente_1,i.telefone_contato_urgente_2,i.telefone_contato_urgente_3,i.observacao,i.certidao_nascimento,i.curatela,i.inss,i.loas,i.bpc,i.funrural,i.saf,i.sus,i.id_interno,i.certidao_casamento,i.ctps,i.titulo,d.imgdoc,d.descricao,d.id_documento FROM pessoa p LEFT JOIN interno i ON p.id_pessoa = i.id_pessoa left join documento d on p.id_pessoa=d.id_pessoa WHERE i.id_interno=:id";
    +        $stmt = $pdo->prepare($sql);
    +        $stmt->bindParam(':id', $id);
    +
    +        $stmt->execute();
    +        $interno = array();
    +        while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
    +            if ($linha['cpf'] === "Não informado") {
    +                $interno[] = array('ctps' => $linha['ctps'], 'titulo' => $linha['titulo'], 'casamento' => $linha['certidao_casamento'], 'imagem' => $linha['imagem'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'cpf' => $linha['cpf'], 'senha' => $linha['senha'], 'sexo' => $linha['sexo'], 'telefone' => $linha['telefone'], 'data_nascimento' => $linha['data_nascimento'], 'cep' => $linha['cep'], 'cidade' => $linha['cidade'], 'bairro' => $linha['bairro'], 'logradouro' => $linha['logradouro'], 'numero_endereco' => $linha['numero_endereco'], 'complemento' => $linha['complemento'], 'ibge' => $linha['ibge'], 'registro_geral' => $linha['registro_geral'], 'orgao_emissor' => $linha['orgao_emissor'], 'data_expedicao' => $linha['data_expedicao'], 'nome_pai' => $linha['nome_pai'], 'nome_mae' => $linha['nome_mae'], 'tipo_sanguineo' => $linha['tipo_sanguineo'], 'nome_contato_urgente' => $linha['nome_contato_urgente'], 'telefone_contato_urgente_1' => $linha['telefone_contato_urgente_1'], 'telefone_contato_urgente_2' => $linha['telefone_contato_urgente_2'], 'telefone_contato_urgente_3' => $linha['telefone_contato_urgente_3'], 'observacao' => $linha['observacao'], 'certidao' => $linha['certidao_nascimento'], 'curatela' => $linha['curatela'], 'inss' => $linha['inss'], 'loas' => $linha['loas'], 'bpc' => $linha['bpc'], 'funrural' => $linha['funrural'], 'saf' => $linha['saf'], 'sus' => $linha['sus'], 'idInterno' => $linha['id_interno'], 'imgdoc' => $linha['imgdoc'], 'descricao' => $linha['descricao'], 'id_documento' => $linha['id_documento']);
    +            } else {
    +                $interno[] = array('ctps' => $linha['ctps'], 'titulo' => $linha['titulo'], 'casamento' => $linha['certidao_casamento'], 'imagem' => $linha['imagem'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'cpf' => mask($linha['cpf'], '###.###.###-##'), 'senha' => $linha['senha'], 'sexo' => $linha['sexo'], 'telefone' => $linha['telefone'], 'data_nascimento' => $linha['data_nascimento'], 'cep' => $linha['cep'], 'cidade' => $linha['cidade'], 'bairro' => $linha['bairro'], 'logradouro' => $linha['logradouro'], 'numero_endereco' => $linha['numero_endereco'], 'complemento' => $linha['complemento'], 'ibge' => $linha['ibge'], 'registro_geral' => $linha['registro_geral'], 'orgao_emissor' => $linha['orgao_emissor'], 'data_expedicao' => $linha['data_expedicao'], 'nome_pai' => $linha['nome_pai'], 'nome_mae' => $linha['nome_mae'], 'tipo_sanguineo' => $linha['tipo_sanguineo'], 'nome_contato_urgente' => $linha['nome_contato_urgente'], 'telefone_contato_urgente_1' => $linha['telefone_contato_urgente_1'], 'telefone_contato_urgente_2' => $linha['telefone_contato_urgente_2'], 'telefone_contato_urgente_3' => $linha['telefone_contato_urgente_3'], 'observacao' => $linha['observacao'], 'certidao' => $linha['certidao_nascimento'], 'curatela' => $linha['curatela'], 'inss' => $linha['inss'], 'loas' => $linha['loas'], 'bpc' => $linha['bpc'], 'funrural' => $linha['funrural'], 'saf' => $linha['saf'], 'sus' => $linha['sus'], 'idInterno' => $linha['id_interno'], 'imgdoc' => $linha['imgdoc'], 'descricao' => $linha['descricao'], 'id_documento' => $linha['id_documento']);
                 }
             }
    -        }catch (PDOException $e){
    -            echo 'Error: ' .  $e->getMessage();
    -        }
    +
             return json_encode($interno);
         }
     
         public function listarCPF()
         {
    -        try
    -        {
    -            $cpfs = array();
    -            $pdo = Conexao::connect();
    -            $consulta = $pdo->query("SELECT cpf from pessoa p INNER JOIN interno i ON(p.id_pessoa=i.id_pessoa)");
    -            $x=0;
    -            while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
    -                $cpfs[$x] = array('cpf'=>$linha['cpf']);
    -                $x++;
    -            }
    -        }
    -        catch(PDOException $e)
    -        {
    -            echo 'Error:' . $e->getMessage();
    +        $cpfs = array();
    +        $pdo = Conexao::connect();
    +        $consulta = $pdo->query("SELECT cpf from pessoa p INNER JOIN interno i ON(p.id_pessoa=i.id_pessoa)");
    +        $x = 0;
    +        while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
    +            $cpfs[$x] = array('cpf' => $linha['cpf']);
    +            $x++;
             }
    +
             return json_encode($cpfs);
         }
     }
    -?>
    \ No newline at end of file
    
ed34f005139d

fix: Open Redirect Vulnerability [Security https://github.com/LabRedesCefetRJ/WeGIA/security/advisories/GHSA-x85f-76c9-qw3x]

https://github.com/LabRedesCefetRJ/WeGIAGabrielPintoSouzaApr 27, 2026Fixed in 3.7.3via llm-release-walk
2 files changed · +367 391
  • controle/InternoControle.php+117 106 modified
    @@ -1,100 +1,106 @@
     <?php
    +if (session_status() === PHP_SESSION_NONE) {
    +    session_start();
    +}
     
     error_reporting(0);
    -ini_set('display_errors', 0 );
    +ini_set('display_errors', 0);
     
     require_once '../classes/Interno.php';
    +require_once dirname(__FILE__, 2) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'Util.php';
     require_once '../dao/InternoDAO.php';
     require_once '../classes/Documento.php';
     require_once '../dao/DocumentoDAO.php';
     require_once 'DocumentoControle.php';
     include_once '../classes/Cache.php';
     
    -require_once ROOT."/controle/InternoControle.php";
    -require_once ROOT."/controle/FuncionarioControle.php";
    +require_once ROOT . "/controle/InternoControle.php";
    +require_once ROOT . "/controle/FuncionarioControle.php";
     $listaInternos = new InternoControle();
     $listaInternos->listarTodos2();
     
    -class InternoControle 
    +class InternoControle
     {
    -	public function formatoDataYMD($data)
    -    	{
    -        	$data_arr = explode("/", $data);
    -        
    -        	$datac = $data_arr[2] . '-' . $data_arr[1] . '-' . $data_arr[0];
    -        
    -               return $datac;
    -    	}
    -   public function verificar(){
    +    //OpenRedirect nos métodos
    +    public function formatoDataYMD($data)
    +    {
    +        $data_arr = explode("/", $data);
    +
    +        $datac = $data_arr[2] . '-' . $data_arr[1] . '-' . $data_arr[0];
    +
    +        return $datac;
    +    }
    +    public function verificar()
    +    {
             extract($_REQUEST);
    -        session_start();
    -        if((!isset($nome)) || (empty($nome))){
    +
    +        if ((!isset($nome)) || (empty($nome))) {
                 $msg = "Nome do interno não informado. Por favor, informe um nome!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if((!isset($sobrenome)) || (empty($sobrenome))){
    +        if ((!isset($sobrenome)) || (empty($sobrenome))) {
                 $msg = "Sobrenome do interno não informado. Por favor, informe um sobrenome!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if((!isset($sexo)) || (empty($sexo))){
    +        if ((!isset($sexo)) || (empty($sexo))) {
                 $msg .= "Sexo do interno não informado. Por favor, informe um sexo!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if((!isset($nascimento)) || (empty($nascimento))){
    +        if ((!isset($nascimento)) || (empty($nascimento))) {
                 $msg .= "Data de nascimento do interno não informado. Por favor, informe uma data de nascimento!";
    -            header('Location: ../html/atendido/Cadastro_Atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_Atendido.php?msg=' . $msg);
             }
    -        if(isset($naoPossuiCpf))
    -        {
    +        if (isset($naoPossuiCpf)) {
                 $internos = $_SESSION['internos2'];
    -            $j=0;
    -            for($i=0; $i<count($internos); $i++)
    -            {
    -                if($nome==$internos[$i]['nome'])
    -                {
    +            $j = 0;
    +            for ($i = 0; $i < count($internos); $i++) {
    +                if ($nome == $internos[$i]['nome']) {
                         $j++;
                     }
                 }
    -            if($j==0)
    -            {
    -                $numeroCPF = $nome."ni";
    -            }
    -            else
    -            {
    -                $numeroCPF = $nome.$j."ni";
    +            if ($j == 0) {
    +                $numeroCPF = $nome . "ni";
    +            } else {
    +                $numeroCPF = $nome . $j . "ni";
                 }
    -        }
    -        elseif((!isset($numeroCPF)) || (empty($numeroCPF))){
    +        } elseif ((!isset($numeroCPF)) || (empty($numeroCPF))) {
                 $msg .= "CPF do interno não informado. Por favor, informe um CPF!";
    -            header('Location: ../html/atendido/Cadastro_atendido.php?msg='.$msg);
    +            header('Location: ../html/atendido/Cadastro_atendido.php?msg=' . $msg);
             }
    -            $telefone='';
    -            $senha='null';
    -            $numeroCPF=str_replace(".", '', $numeroCPF);
    -            $numeroCPF=str_replace("-", "", $numeroCPF);
    -            $interno = new Interno($numeroCPF,$nome,$sobrenome,$sexo,$nascimento,'','','','','','','',$telefone,'','','','','','','','','');
    -           
    -            return $interno;
    +        $telefone = '';
    +        $senha = 'null';
    +        $numeroCPF = str_replace(".", '', $numeroCPF);
    +        $numeroCPF = str_replace("-", "", $numeroCPF);
    +        $interno = new Interno($numeroCPF, $nome, $sobrenome, $sexo, $nascimento, '', '', '', '', '', '', '', $telefone, '', '', '', '', '', '', '', '', '');
    +
    +        return $interno;
    +    }
    +
    +    public function listarTodos($redirect = true)
    +    {
    +        try {
    +            $internoDAO = new InternoDAO();
    +            $internos = $internoDAO->listarTodos();
    +
    +            $_SESSION['internos'] = $internos;
    +            if ($redirect) {
    +                header('Location: ' . '../html/informacao_interno.php');
    +            }
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
    -    
    -    public function listarTodos(){
    -        extract($_REQUEST);
    -        $internoDAO= new InternoDAO();
    -        $internos = $internoDAO->listarTodos();
    -        session_start();
    -        $_SESSION['internos']=$internos;
    -        header('Location: '.$nextPage);
         }
     
    -    public function listarTodos2(){
    -        extract($_REQUEST);
    -        $internoDAO= new InternoDAO();
    -        $internos = $internoDAO->listarTodos2();
    -        if (session_status() !== PHP_SESSION_ACTIVE)
    -        {
    -            session_start();
    +    public function listarTodos2()
    +    {
    +        try {
    +            $internoDAO = new InternoDAO();
    +            $internos = $internoDAO->listarTodos2();
    +
    +            $_SESSION['internos2'] = $internos;
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
    -        $_SESSION['internos2']=$internos;
         }
     
         public function listarUm()
    @@ -104,73 +110,78 @@ public function listarUm()
             $infInterno = $cache->read($id);
             if (!$infInterno) {
                 try {
    -                $internoDAO=new InternoDAO();
    -                $infInterno=$internoDAO->listar($id);
    -                session_start();
    -                $_SESSION['interno']=$infInterno;
    +                $internoDAO = new InternoDAO();
    +                $infInterno = $internoDAO->listar($id);
    +
    +                $_SESSION['interno'] = $infInterno;
                     $cache->save($id, $infInterno, '15 seconds');
    -                header('Location:'.$nextPage);
    -            } catch (PDOException $e) {
    -                echo $e->getMessage();
    +                header('Location:' . '../html/informacao_interno.php');
    +            } catch (Exception $e) {
    +                Util::tratarException($e);
                 }
    +        } else {
    +            header('Location:' . '../html/informacao_interno.php');
             }
    -        else{
    -            header('Location:'.$nextPage);
    -        }
    -        
         }
     
    -    public function listarCpf(){
    -        extract($_REQUEST);
    -        $internosDAO = new InternoDAO();
    -        $internoscpf = $internosDAO->listarCPF();
    -        $_SESSION['cpf_interno']=$internoscpf;
    +    public function listarCpf()
    +    {
    +        try {
    +            $internosDAO = new InternoDAO();
    +            $internoscpf = $internosDAO->listarCPF();
    +            $_SESSION['cpf_interno'] = $internoscpf;
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
    +        }
         }
     
    -    public function comprimir($documParaCompressao){
    -			$documento_zip = gzcompress($documParaCompressao);
    -			return $documento_zip;
    +    public function comprimir($documParaCompressao)
    +    {
    +        $documento_zip = gzcompress($documParaCompressao);
    +        return $documento_zip;
         }
    -        
    -    public function incluir(){
    -        $interno = $this->verificar();
    -        $intDAO = new AtendidoDAO();
    -        $docDAO = new DocumentoDAO();
    -        try{
    -            $idPessoa=$intDAO->incluir($interno, $interno->getCpf());
    -            $_SESSION['msg']="Interno cadastrado com sucesso";
    -            $_SESSION['proxima']="Cadastrar outro interno";
    -            $_SESSION['link']="../html/atendido/Cadastro_Atendido.php";
    +
    +    public function incluir()
    +    {
    +        try {
    +            $interno = $this->verificar();
    +            $intDAO = new AtendidoDAO();
    +            $docDAO = new DocumentoDAO();
    +            $idPessoa = $intDAO->incluir($interno, $interno->getCpf());
    +            $_SESSION['msg'] = "Interno cadastrado com sucesso";
    +            $_SESSION['proxima'] = "Cadastrar outro interno";
    +            $_SESSION['link'] = "../html/atendido/Cadastro_Atendido.php";
                 header("Location: ../html/sucesso.php");
    -        } catch (PDOException $e){
    -            $msg= "Não foi possível registrar o interno <form> <input type='button' value='Voltar' onClick='history.go(-1)'> </form>"."<br>".$e->getMessage();
    -            echo $msg;
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
         }
         public function alterar()
         {
    -        extract($_REQUEST);
    -        $interno=$this->verificar();
    -        $interno->setIdInterno($idInterno);
    -        $AtendidoDAO=new AtendidoDAO();
             try {
    +            extract($_REQUEST);
    +            $interno = $this->verificar();
    +            $interno->setIdInterno($idInterno);
    +            $AtendidoDAO = new AtendidoDAO();
    +
                 $AtendidoDAO->alterar($interno);
    -            header("Location: ../html/Profile_Atendido.php?id=".$idInterno);
    -        } catch (PDOException $e) {
    -            echo $e->getMessage();
    +            header("Location: ../html/Profile_Atendido.php?id=" . $idInterno);
    +        } catch (Exception $e) {
    +            Util::tratarException($e);
             }
    -
         }
     
         public function excluir()
         {
    -        extract($_REQUEST);
    -        $AtendidoDAO=new AtendidoDAO();
             try {
    +            extract($_REQUEST);
    +            $AtendidoDAO = new AtendidoDAO();
    +
                 $AtendidoDAO->excluir($id);
    -            header("Location:../controle/control.php?metodo=listarTodos&nomeClasse=InternoControle&nextPage=../html/Informacao_Atendido.php");
    +            $this->listarTodos(false);
    +            header("Location: ../html/Informacao_Atendido.php");
             } catch (Exception $e) {
    -            echo $e->getMessage();
    +            Util::tratarException($e);
             }
         }
     }
    
  • dao/InternoDAO.php+250 285 modified
    @@ -8,329 +8,294 @@ class InternoDAO
         public function formatoDataDMY($data)
         {
             $data_arr = explode("-", $data);
    -        
    +
             $datad = $data_arr[2] . '/' . $data_arr[1] . '/' . $data_arr[0];
    -        
    +
             return $datad;
         }
    -	public function incluir($interno)
    -    {        
    -        try {
    -            $sql = 'call cadinterno(:nome,:sobrenome,:cpf,:senha,:sexo,:telefone,:data_nascimento,:imagem,:cep,:estado,:cidade,:bairro,:logradouro,:numero_endereco,:complemento,:ibge,:registro_geral,:orgao_emissor,:data_expedicao,:nome_pai,:nome_mae,:tipo_sanguineo,:nome_contato_urgente,:telefone_contato_urgente_1,:telefone_contato_urgente_2,:telefone_contato_urgente_3,:observacao,:certidao,:curatela,:inss,:loas,:bpc,:funrural,:saf,:sus,:certidao_casamento,:ctps,:titulo)';
    -            $sql = str_replace("'", "\'", $sql);            
    -            $pdo = Conexao::connect();
    -            $stmt = $pdo->prepare($sql);
    -            $senha=$interno->getSenha();
    -            $nome=$interno->getNome();
    -            $sobrenome=$interno->getSobrenome();
    -            $cpf=$interno->getCpf();
    -            $sexo=$interno->getSexo();
    -            $telefone=$interno->getTelefone();
    -            $nascimento=$interno->getDataNascimento();
    -            $imagem=$interno->getImagem();
    -            $cep=$interno->getCep();
    -            $cidade=$interno->getCidade();
    -            $bairro=$interno->getBairro();
    -            $logradouro=$interno->getLogradouro();
    -            $numeroEndereco=$interno->getNumeroEndereco();
    -            $complemento=$interno->getComplemento();
    -            $rg=$interno->getRegistroGeral();
    -            $orgaoEmissor=$interno->getOrgaoEmissor();
    -            $nomePai=$interno->getNomePai();        
    -            $nomeMae=$interno->getNomeMae();
    -            $sangue=$interno->getTipoSanguineo();
    -            $nomeContatoUrgente=$interno->getNomeContatoUrgente();
    -            $telefone1=$interno->getTelefoneContatoUrgente1();
    -            $telefone2=$interno->getTelefoneContatoUrgente2();
    -            $telefone3=$interno->getTelefoneContatoUrgente3();
    -            $observacao=$interno->getObservacao();
    -            $ibge=$interno->getIbge();
    -            $dataExpedicao=$interno->getDataExpedicao();
    -            $certidao=$interno->getCertidaoNascimento();
    -            $curatela=$interno->getCuratela();
    -            $inss=$interno->getInss();
    -            $loas=$interno->getLoas();
    -            $bpc=$interno->getBpc();
    -            $funrural=$interno->getFunrural();
    -            $saf=$interno->getSaf();
    -            $sus=$interno->getSus();
    -            $certidaoCasamento=$interno->getCertidaoCasamento();
    -            $ctps=$interno->getCtps();
    -            $titulo=$interno->getTitulo();
    -            $estado=$interno->getEstado();
    -
    -            $stmt->bindParam(':senha',$senha);
    -            $stmt->bindParam(':nome',$nome);
    -            $stmt->bindParam(':sobrenome',$sobrenome);
    -            $stmt->bindParam(':cpf',$cpf);
    -            $stmt->bindParam(':sexo',$sexo);
    -            $stmt->bindParam(':telefone',$telefone);
    -            $stmt->bindParam(':data_nascimento',$nascimento);
    -            $stmt->bindParam(':imagem',$imagem);        
    -            $stmt->bindParam(':cep',$cep);
    -            $stmt->bindParam(':estado',$estado);
    -            $stmt->bindParam(':cidade',$cidade);
    -            $stmt->bindParam(':bairro',$bairro);
    -            $stmt->bindParam(':logradouro',$logradouro);
    -            $stmt->bindParam(':numero_endereco',$numeroEndereco);
    -            $stmt->bindParam(':complemento',$complemento);
    -            $stmt->bindParam(':registro_geral',$rg);
    -            $stmt->bindParam(':orgao_emissor',$orgaoEmissor);
    -            $stmt->bindParam(':data_expedicao',$dataExpedicao);
    -            $stmt->bindParam(':nome_pai',$nomePai);        
    -            $stmt->bindParam(':nome_mae',$nomeMae);
    -            $stmt->bindParam(':tipo_sanguineo',$sangue);
    -            $stmt->bindParam(':nome_contato_urgente',$nomeContatoUrgente);
    -            $stmt->bindParam(':telefone_contato_urgente_1',$telefone1);
    -            $stmt->bindParam(':telefone_contato_urgente_2',$telefone2);
    -            $stmt->bindParam(':telefone_contato_urgente_3',$telefone3);
    -            $stmt->bindParam(':observacao',$observacao);
    -            $stmt->bindParam(':ibge',$ibge);
    -            $stmt->bindParam(':certidao',$certidao);
    -            $stmt->bindParam(':curatela',$curatela);
    -            $stmt->bindParam(':inss',$inss);
    -            $stmt->bindParam(':loas',$loas);
    -            $stmt->bindParam(':bpc',$bpc);
    -            $stmt->bindParam(':funrural',$funrural);
    -            $stmt->bindParam(':saf',$saf);
    -            $stmt->bindParam(':sus',$sus);
    -            $stmt->bindParam(':certidao_casamento',$certidaoCasamento);
    -            $stmt->bindParam(':ctps',$ctps);
    -            $stmt->bindParam(':titulo',$titulo);
    -            $stmt->execute();
    -            while($linha = $stmt->fetch(PDO::FETCH_ASSOC)){
    -                $idPessoa=$linha['MAX(id_pessoa)'];
    -            }
    -            return $idPessoa;
    +    public function incluir($interno)
    +    {
    +        $sql = 'call cadinterno(:nome,:sobrenome,:cpf,:senha,:sexo,:telefone,:data_nascimento,:imagem,:cep,:estado,:cidade,:bairro,:logradouro,:numero_endereco,:complemento,:ibge,:registro_geral,:orgao_emissor,:data_expedicao,:nome_pai,:nome_mae,:tipo_sanguineo,:nome_contato_urgente,:telefone_contato_urgente_1,:telefone_contato_urgente_2,:telefone_contato_urgente_3,:observacao,:certidao,:curatela,:inss,:loas,:bpc,:funrural,:saf,:sus,:certidao_casamento,:ctps,:titulo)';
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $stmt = $pdo->prepare($sql);
    +        $senha = $interno->getSenha();
    +        $nome = $interno->getNome();
    +        $sobrenome = $interno->getSobrenome();
    +        $cpf = $interno->getCpf();
    +        $sexo = $interno->getSexo();
    +        $telefone = $interno->getTelefone();
    +        $nascimento = $interno->getDataNascimento();
    +        $imagem = $interno->getImagem();
    +        $cep = $interno->getCep();
    +        $cidade = $interno->getCidade();
    +        $bairro = $interno->getBairro();
    +        $logradouro = $interno->getLogradouro();
    +        $numeroEndereco = $interno->getNumeroEndereco();
    +        $complemento = $interno->getComplemento();
    +        $rg = $interno->getRegistroGeral();
    +        $orgaoEmissor = $interno->getOrgaoEmissor();
    +        $nomePai = $interno->getNomePai();
    +        $nomeMae = $interno->getNomeMae();
    +        $sangue = $interno->getTipoSanguineo();
    +        $nomeContatoUrgente = $interno->getNomeContatoUrgente();
    +        $telefone1 = $interno->getTelefoneContatoUrgente1();
    +        $telefone2 = $interno->getTelefoneContatoUrgente2();
    +        $telefone3 = $interno->getTelefoneContatoUrgente3();
    +        $observacao = $interno->getObservacao();
    +        $ibge = $interno->getIbge();
    +        $dataExpedicao = $interno->getDataExpedicao();
    +        $certidao = $interno->getCertidaoNascimento();
    +        $curatela = $interno->getCuratela();
    +        $inss = $interno->getInss();
    +        $loas = $interno->getLoas();
    +        $bpc = $interno->getBpc();
    +        $funrural = $interno->getFunrural();
    +        $saf = $interno->getSaf();
    +        $sus = $interno->getSus();
    +        $certidaoCasamento = $interno->getCertidaoCasamento();
    +        $ctps = $interno->getCtps();
    +        $titulo = $interno->getTitulo();
    +        $estado = $interno->getEstado();
     
    -        }catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela interno = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    +        $stmt->bindParam(':senha', $senha);
    +        $stmt->bindParam(':nome', $nome);
    +        $stmt->bindParam(':sobrenome', $sobrenome);
    +        $stmt->bindParam(':cpf', $cpf);
    +        $stmt->bindParam(':sexo', $sexo);
    +        $stmt->bindParam(':telefone', $telefone);
    +        $stmt->bindParam(':data_nascimento', $nascimento);
    +        $stmt->bindParam(':imagem', $imagem);
    +        $stmt->bindParam(':cep', $cep);
    +        $stmt->bindParam(':estado', $estado);
    +        $stmt->bindParam(':cidade', $cidade);
    +        $stmt->bindParam(':bairro', $bairro);
    +        $stmt->bindParam(':logradouro', $logradouro);
    +        $stmt->bindParam(':numero_endereco', $numeroEndereco);
    +        $stmt->bindParam(':complemento', $complemento);
    +        $stmt->bindParam(':registro_geral', $rg);
    +        $stmt->bindParam(':orgao_emissor', $orgaoEmissor);
    +        $stmt->bindParam(':data_expedicao', $dataExpedicao);
    +        $stmt->bindParam(':nome_pai', $nomePai);
    +        $stmt->bindParam(':nome_mae', $nomeMae);
    +        $stmt->bindParam(':tipo_sanguineo', $sangue);
    +        $stmt->bindParam(':nome_contato_urgente', $nomeContatoUrgente);
    +        $stmt->bindParam(':telefone_contato_urgente_1', $telefone1);
    +        $stmt->bindParam(':telefone_contato_urgente_2', $telefone2);
    +        $stmt->bindParam(':telefone_contato_urgente_3', $telefone3);
    +        $stmt->bindParam(':observacao', $observacao);
    +        $stmt->bindParam(':ibge', $ibge);
    +        $stmt->bindParam(':certidao', $certidao);
    +        $stmt->bindParam(':curatela', $curatela);
    +        $stmt->bindParam(':inss', $inss);
    +        $stmt->bindParam(':loas', $loas);
    +        $stmt->bindParam(':bpc', $bpc);
    +        $stmt->bindParam(':funrural', $funrural);
    +        $stmt->bindParam(':saf', $saf);
    +        $stmt->bindParam(':sus', $sus);
    +        $stmt->bindParam(':certidao_casamento', $certidaoCasamento);
    +        $stmt->bindParam(':ctps', $ctps);
    +        $stmt->bindParam(':titulo', $titulo);
    +        $stmt->execute();
    +        while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
    +            $idPessoa = $linha['MAX(id_pessoa)'];
             }
    +        return $idPessoa;
         }
     
         // excluir
         public function excluir($idinterno)
         {
    -        try {
    -            $sql = 'call excluirinterno(:idi)';
    -            $sql = str_replace("'", "\'", $sql);
    -            $pdo = Conexao::connect();
    -            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    -            
    -            $stmt = $pdo->prepare($sql);
    -            
    -            $stmt->bindParam(':idi', $idinterno);
    -            
    -            $stmt->execute();
    -        } catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela pessoas = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    -        }
    +        $sql = 'call excluirinterno(:idi)';
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    +
    +        $stmt = $pdo->prepare($sql);
    +
    +        $stmt->bindParam(':idi', $idinterno);
    +
    +        $stmt->execute();
         }
     
         public function alterarImagem($interno)
         {
    -        try {
    -            $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set imagem=:imagem where id_interno=:id_interno';
    -            
    -           $sql = str_replace("'", "\'", $sql);
    -            $pdo = Conexao::connect();
    -            $stmt = $pdo->prepare($sql);
    -            
    -            $stmt = $pdo->prepare($sql);
    -            $imagem=$interno->getImagem();
    -            $id_interno=$interno->getIdInterno();
    +        $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set imagem=:imagem where id_interno=:id_interno';
     
    -            $stmt->bindParam(':imagem',$imagem);
    -            $stmt->bindParam(':id_interno',$id_interno);
    -            $stmt->execute();
    -        } catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela pessoas = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    -        }
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $stmt = $pdo->prepare($sql);
    +
    +        $stmt = $pdo->prepare($sql);
    +        $imagem = $interno->getImagem();
    +        $id_interno = $interno->getIdInterno();
    +
    +        $stmt->bindParam(':imagem', $imagem);
    +        $stmt->bindParam(':id_interno', $id_interno);
    +        $stmt->execute();
         }
     
         // Editar
         public function alterar($interno)
         {
    -        try {
    -            $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set p.senha=:senha,p.nome=:nome, p.sobrenome=:sobrenome,p.cpf=:cpf,p.sexo=:sexo,p.telefone=:telefone,p.data_nascimento=:data_nascimento,p.imagem=:imagem,p.cep=:cep,p.estado=:estado,p.cidade=:cidade,p.bairro=:bairro,p.logradouro=:logradouro,p.numero_endereco=:numero_endereco,p.complemento=:complemento,p.ibge=:ibge,p.registro_geral=:registro_geral,p.orgao_emissor=:orgao_emissor,p.data_expedicao=:data_expedicao,p.nome_pai=:nome_pai,p.nome_mae=:nome_mae,p.tipo_sanguineo=:tipo_sanguineo,i.nome_contato_urgente=:nome_contato_urgente,i.telefone_contato_urgente_1=:telefone_contato_urgente_1,i.telefone_contato_urgente_2=:telefone_contato_urgente_2,i.telefone_contato_urgente_3=:telefone_contato_urgente_3,i.observacao=:observacao,i.certidao_nascimento=:certidao,i.curatela=:curatela,i.inss=:inss,i.loas=:loas,i.bpc=:bpc,i.funrural=:funrural,i.saf=:saf,i.sus=:sus,i.certidao_casamento=:certidao_casamento,i.ctps=:ctps,i.titulo=:titulo where i.id_interno=:id_interno';
    -            
    -            $sql = str_replace("'", "\'", $sql);
    -            $pdo = Conexao::connect();
    -            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    -            
    -            $stmt = $pdo->prepare($sql);
    -            $certidao_casamento=$interno->getCertidaoCasamento();
    -            $ctps=$interno->getCtps();
    -            $titulo=$interno->getTitulo();
    -            $nome=$interno->getNome();
    -            $sobrenome=$interno->getsobrenome();
    -            $cpf=$interno->getCpf();
    -            $sexo=$interno->getSexo();
    -            $telefone=$interno->getTelefone();
    -            $nascimento=$interno->getDataNascimento();
    -            $imagem=$interno->getImagem();
    -            $cep=$interno->getCep();
    -            $cidade=$interno->getCidade();
    -            $bairro=$interno->getBairro();
    -            $logradouro=$interno->getLogradouro();
    -            $numeroEndereco=$interno->getNumeroEndereco();
    -            $complemento=$interno->getComplemento();
    -            $rg=$interno->getRegistroGeral();
    -            $orgaoEmissor=$interno->getOrgaoEmissor();
    -            $nomePai=$interno->getNomePai();        
    -            $nomeMae=$interno->getNomeMae();
    -            $sangue=$interno->getTipoSanguineo();
    -            $nomeContatoUrgente=$interno->getNomeContatoUrgente();
    -            $telefone1=$interno->getTelefoneContatoUrgente1();
    -            $telefone2=$interno->getTelefoneContatoUrgente2();
    -            $telefone3=$interno->getTelefoneContatoUrgente3();
    -            $ibge=$interno->getIbge();
    -            $dataExpedicao=$interno->getDataExpedicao();
    -            $certidao=$interno->getCertidaoNascimento();
    -            $curatela=$interno->getCuratela();
    -            $inss=$interno->getInss();
    -            $loas=$interno->getLoas();
    -            $bpc=$interno->getBpc();
    -            $funrural=$interno->getFunrural();
    -            $saf=$interno->getSaf();
    -            $sus=$interno->getSus();
    -            $idInterno=$interno->getIdInterno();
    -            $estado=$interno->getEstado();
    -            $observacao=$interno->getObservacao();
    -            
    -            $stmt->bindParam(':id_interno',$idInterno);
    -            $stmt->bindParam(':senha',$senha);
    -            $stmt->bindParam(':nome',$nome);
    -            $stmt->bindParam(':sobrenome',$sobrenome);
    -            $stmt->bindParam(':cpf',$cpf);
    -            $stmt->bindParam(':sexo',$sexo);
    -            $stmt->bindParam(':telefone',$telefone);
    -            $stmt->bindParam(':data_nascimento',$nascimento);
    -            $stmt->bindParam(':imagem',$imagem);        
    -            $stmt->bindParam(':cep',$cep);
    -            $stmt->bindParam(':estado',$estado);
    -            $stmt->bindParam(':cidade',$cidade);
    -            $stmt->bindParam(':bairro',$bairro);
    -            $stmt->bindParam(':logradouro',$logradouro);
    -            $stmt->bindParam(':numero_endereco',$numeroEndereco);
    -            $stmt->bindParam(':complemento',$complemento);
    -            $stmt->bindParam(':registro_geral',$rg);
    -            $stmt->bindParam(':orgao_emissor',$orgaoEmissor);
    -            $stmt->bindParam(':data_expedicao',$dataExpedicao);
    -            $stmt->bindParam(':nome_pai',$nomePai);        
    -            $stmt->bindParam(':nome_mae',$nomeMae);
    -            $stmt->bindParam(':tipo_sanguineo',$sangue);
    -            $stmt->bindParam(':nome_contato_urgente',$nomeContatoUrgente);
    -            $stmt->bindParam(':telefone_contato_urgente_1',$telefone1);
    -            $stmt->bindParam(':telefone_contato_urgente_2',$telefone2);
    -            $stmt->bindParam(':telefone_contato_urgente_3',$telefone3);
    -            $stmt->bindParam(':observacao',$observacao);
    -            $stmt->bindParam(':ibge',$ibge);
    -            $stmt->bindParam(':certidao',$certidao);
    -            $stmt->bindParam(':curatela',$curatela);
    -            $stmt->bindParam(':inss',$inss);
    -            $stmt->bindParam(':loas',$loas);
    -            $stmt->bindParam(':bpc',$bpc);
    -            $stmt->bindParam(':funrural',$funrural);
    -            $stmt->bindParam(':saf',$saf);
    -            $stmt->bindParam(':sus',$sus);
    -            $stmt->bindParam(':certidao_casamento',$certidao_casamento);
    -            $stmt->bindParam(':ctps',$ctps);
    -            $stmt->bindParam(':titulo',$titulo);
    -            $stmt->execute();
    -        } catch (PDOException $e) {
    -            echo 'Error: <b>  na tabela pessoas = ' . $sql . '</b> <br /><br />' . $e->getMessage();
    -        }
    -    }
    -    public function listarTodos(){
    +        $sql = 'update pessoa as p inner join interno as i on p.id_pessoa=i.id_pessoa set p.senha=:senha,p.nome=:nome, p.sobrenome=:sobrenome,p.cpf=:cpf,p.sexo=:sexo,p.telefone=:telefone,p.data_nascimento=:data_nascimento,p.imagem=:imagem,p.cep=:cep,p.estado=:estado,p.cidade=:cidade,p.bairro=:bairro,p.logradouro=:logradouro,p.numero_endereco=:numero_endereco,p.complemento=:complemento,p.ibge=:ibge,p.registro_geral=:registro_geral,p.orgao_emissor=:orgao_emissor,p.data_expedicao=:data_expedicao,p.nome_pai=:nome_pai,p.nome_mae=:nome_mae,p.tipo_sanguineo=:tipo_sanguineo,i.nome_contato_urgente=:nome_contato_urgente,i.telefone_contato_urgente_1=:telefone_contato_urgente_1,i.telefone_contato_urgente_2=:telefone_contato_urgente_2,i.telefone_contato_urgente_3=:telefone_contato_urgente_3,i.observacao=:observacao,i.certidao_nascimento=:certidao,i.curatela=:curatela,i.inss=:inss,i.loas=:loas,i.bpc=:bpc,i.funrural=:funrural,i.saf=:saf,i.sus=:sus,i.certidao_casamento=:certidao_casamento,i.ctps=:ctps,i.titulo=:titulo where i.id_interno=:id_interno';
     
    -        try{
    -            $internos=array();
    -            $pdo = Conexao::connect();
    -            $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    -            $produtos = Array();
    -            $x=0;
    -            while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
    -                if ($linha['cpf']==="Não informado") {
    -                    $internos[$x]=array('cpf'=>$linha['cpf'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                else{
    -                $internos[$x]=array('cpf'=>mask($linha['cpf'],'###.###.###-##'),'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                $x++;
    -            }
    -            } catch (PDOException $e){
    -                echo 'Error:' . $e->getMessage();
    +        $sql = str_replace("'", "\'", $sql);
    +        $pdo = Conexao::connect();
    +        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    +
    +        $stmt = $pdo->prepare($sql);
    +        $certidao_casamento = $interno->getCertidaoCasamento();
    +        $ctps = $interno->getCtps();
    +        $titulo = $interno->getTitulo();
    +        $nome = $interno->getNome();
    +        $sobrenome = $interno->getsobrenome();
    +        $cpf = $interno->getCpf();
    +        $sexo = $interno->getSexo();
    +        $telefone = $interno->getTelefone();
    +        $nascimento = $interno->getDataNascimento();
    +        $imagem = $interno->getImagem();
    +        $cep = $interno->getCep();
    +        $cidade = $interno->getCidade();
    +        $bairro = $interno->getBairro();
    +        $logradouro = $interno->getLogradouro();
    +        $numeroEndereco = $interno->getNumeroEndereco();
    +        $complemento = $interno->getComplemento();
    +        $rg = $interno->getRegistroGeral();
    +        $orgaoEmissor = $interno->getOrgaoEmissor();
    +        $nomePai = $interno->getNomePai();
    +        $nomeMae = $interno->getNomeMae();
    +        $sangue = $interno->getTipoSanguineo();
    +        $nomeContatoUrgente = $interno->getNomeContatoUrgente();
    +        $telefone1 = $interno->getTelefoneContatoUrgente1();
    +        $telefone2 = $interno->getTelefoneContatoUrgente2();
    +        $telefone3 = $interno->getTelefoneContatoUrgente3();
    +        $ibge = $interno->getIbge();
    +        $dataExpedicao = $interno->getDataExpedicao();
    +        $certidao = $interno->getCertidaoNascimento();
    +        $curatela = $interno->getCuratela();
    +        $inss = $interno->getInss();
    +        $loas = $interno->getLoas();
    +        $bpc = $interno->getBpc();
    +        $funrural = $interno->getFunrural();
    +        $saf = $interno->getSaf();
    +        $sus = $interno->getSus();
    +        $idInterno = $interno->getIdInterno();
    +        $estado = $interno->getEstado();
    +        $observacao = $interno->getObservacao();
    +
    +        $stmt->bindParam(':id_interno', $idInterno);
    +        $stmt->bindParam(':senha', $senha);
    +        $stmt->bindParam(':nome', $nome);
    +        $stmt->bindParam(':sobrenome', $sobrenome);
    +        $stmt->bindParam(':cpf', $cpf);
    +        $stmt->bindParam(':sexo', $sexo);
    +        $stmt->bindParam(':telefone', $telefone);
    +        $stmt->bindParam(':data_nascimento', $nascimento);
    +        $stmt->bindParam(':imagem', $imagem);
    +        $stmt->bindParam(':cep', $cep);
    +        $stmt->bindParam(':estado', $estado);
    +        $stmt->bindParam(':cidade', $cidade);
    +        $stmt->bindParam(':bairro', $bairro);
    +        $stmt->bindParam(':logradouro', $logradouro);
    +        $stmt->bindParam(':numero_endereco', $numeroEndereco);
    +        $stmt->bindParam(':complemento', $complemento);
    +        $stmt->bindParam(':registro_geral', $rg);
    +        $stmt->bindParam(':orgao_emissor', $orgaoEmissor);
    +        $stmt->bindParam(':data_expedicao', $dataExpedicao);
    +        $stmt->bindParam(':nome_pai', $nomePai);
    +        $stmt->bindParam(':nome_mae', $nomeMae);
    +        $stmt->bindParam(':tipo_sanguineo', $sangue);
    +        $stmt->bindParam(':nome_contato_urgente', $nomeContatoUrgente);
    +        $stmt->bindParam(':telefone_contato_urgente_1', $telefone1);
    +        $stmt->bindParam(':telefone_contato_urgente_2', $telefone2);
    +        $stmt->bindParam(':telefone_contato_urgente_3', $telefone3);
    +        $stmt->bindParam(':observacao', $observacao);
    +        $stmt->bindParam(':ibge', $ibge);
    +        $stmt->bindParam(':certidao', $certidao);
    +        $stmt->bindParam(':curatela', $curatela);
    +        $stmt->bindParam(':inss', $inss);
    +        $stmt->bindParam(':loas', $loas);
    +        $stmt->bindParam(':bpc', $bpc);
    +        $stmt->bindParam(':funrural', $funrural);
    +        $stmt->bindParam(':saf', $saf);
    +        $stmt->bindParam(':sus', $sus);
    +        $stmt->bindParam(':certidao_casamento', $certidao_casamento);
    +        $stmt->bindParam(':ctps', $ctps);
    +        $stmt->bindParam(':titulo', $titulo);
    +        $stmt->execute();
    +    }
    +    public function listarTodos()
    +    {
    +        $internos = array();
    +        $pdo = Conexao::connect();
    +        $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    +        $produtos = array();
    +        $x = 0;
    +        while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
    +            if ($linha['cpf'] === "Não informado") {
    +                $internos[$x] = array('cpf' => $linha['cpf'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
    +            } else {
    +                $internos[$x] = array('cpf' => mask($linha['cpf'], '###.###.###-##'), 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
                 }
    -            return json_encode($internos);
    +            $x++;
             }
     
    +        return json_encode($internos);
    +    }
     
    -    public function listarTodos2(){
     
    -        try{
    -            $internos=array();
    -            $pdo = Conexao::connect();
    -            $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    -            $produtos = Array();
    -            $x=0;
    -            while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
    -                if ($linha['cpf']==="Não informado") {
    -                    $internos[$x]=array('cpf'=>$linha['cpf'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                else{
    -                $internos[$x]=array('cpf'=>mask($linha['cpf'],'###.###.###-##'),'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'id'=>$linha['id_interno']);
    -                }
    -                $x++;
    -            }
    -            } catch (PDOException $e){
    -                echo 'Error:' . $e->getMessage();
    +    public function listarTodos2()
    +    {
    +        $internos = array();
    +        $pdo = Conexao::connect();
    +        $consulta = $pdo->query("SELECT p.nome,p.sobrenome,p.cpf,i.id_interno FROM pessoa p INNER JOIN interno i ON p.id_pessoa = i.id_pessoa");
    +        $produtos = array();
    +        $x = 0;
    +        while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
    +            if ($linha['cpf'] === "Não informado") {
    +                $internos[$x] = array('cpf' => $linha['cpf'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
    +            } else {
    +                $internos[$x] = array('cpf' => mask($linha['cpf'], '###.###.###-##'), 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'id' => $linha['id_interno']);
                 }
    -            return $internos;
    +            $x++;
             }
     
    -    public function listar($id){
    -        try{
    -            echo $id;
    -            $pdo = Conexao::connect();
    -            $sql = "SELECT p.imagem,p.nome,p.sobrenome,p.cpf, p.senha, p.sexo, p.telefone,p.data_nascimento, p.cep,p.cidade,p.bairro,p.logradouro,p.numero_endereco,p.complemento,p.ibge,p.registro_geral,p.orgao_emissor,p.data_expedicao,p.nome_pai,p.nome_mae,p.tipo_sanguineo,i.nome_contato_urgente,i.telefone_contato_urgente_1,i.telefone_contato_urgente_2,i.telefone_contato_urgente_3,i.observacao,i.certidao_nascimento,i.curatela,i.inss,i.loas,i.bpc,i.funrural,i.saf,i.sus,i.id_interno,i.certidao_casamento,i.ctps,i.titulo,d.imgdoc,d.descricao,d.id_documento FROM pessoa p LEFT JOIN interno i ON p.id_pessoa = i.id_pessoa left join documento d on p.id_pessoa=d.id_pessoa WHERE i.id_interno=:id";
    -            $stmt = $pdo->prepare($sql);
    -            $stmt->bindParam(':id',$id);
    +        return $internos;
    +    }
     
    -            $stmt->execute();
    -            $interno=array();
    -            while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
    -                if ($linha['cpf']==="Não informado") {
    -                $interno[]=array('ctps'=>$linha['ctps'],'titulo'=>$linha['titulo'],'casamento'=>$linha['certidao_casamento'],'imagem'=>$linha['imagem'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'cpf'=>$linha['cpf'], 'senha'=>$linha['senha'], 'sexo'=>$linha['sexo'], 'telefone'=>$linha['telefone'],'data_nascimento'=>$linha['data_nascimento'], 'cep'=>$linha['cep'],'cidade'=>$linha['cidade'],'bairro'=>$linha['bairro'],'logradouro'=>$linha['logradouro'],'numero_endereco'=>$linha['numero_endereco'],'complemento'=>$linha['complemento'],'ibge'=>$linha['ibge'],'registro_geral'=>$linha['registro_geral'],'orgao_emissor'=>$linha['orgao_emissor'],'data_expedicao'=>$linha['data_expedicao'],'nome_pai'=>$linha['nome_pai'],'nome_mae'=>$linha['nome_mae'],'tipo_sanguineo'=>$linha['tipo_sanguineo'],'nome_contato_urgente'=>$linha['nome_contato_urgente'],'telefone_contato_urgente_1'=>$linha['telefone_contato_urgente_1'],'telefone_contato_urgente_2'=>$linha['telefone_contato_urgente_2'],'telefone_contato_urgente_3'=>$linha['telefone_contato_urgente_3'],'observacao'=>$linha['observacao'],'certidao'=>$linha['certidao_nascimento'],'curatela'=>$linha['curatela'],'inss'=>$linha['inss'],'loas'=>$linha['loas'],'bpc'=>$linha['bpc'],'funrural'=>$linha['funrural'],'saf'=>$linha['saf'],'sus'=>$linha['sus'],'idInterno'=>$linha['id_interno'],'imgdoc'=>$linha['imgdoc'],'descricao'=>$linha['descricao'],'id_documento'=>$linha['id_documento']);
    -            }
    -            else{
    -                $interno[]=array('ctps'=>$linha['ctps'],'titulo'=>$linha['titulo'],'casamento'=>$linha['certidao_casamento'],'imagem'=>$linha['imagem'],'nome'=>$linha['nome'],'sobrenome'=>$linha['sobrenome'],'cpf'=>mask($linha['cpf'],'###.###.###-##'), 'senha'=>$linha['senha'], 'sexo'=>$linha['sexo'], 'telefone'=>$linha['telefone'],'data_nascimento'=>$linha['data_nascimento'], 'cep'=>$linha['cep'],'cidade'=>$linha['cidade'],'bairro'=>$linha['bairro'],'logradouro'=>$linha['logradouro'],'numero_endereco'=>$linha['numero_endereco'],'complemento'=>$linha['complemento'],'ibge'=>$linha['ibge'],'registro_geral'=>$linha['registro_geral'],'orgao_emissor'=>$linha['orgao_emissor'],'data_expedicao'=>$linha['data_expedicao'],'nome_pai'=>$linha['nome_pai'],'nome_mae'=>$linha['nome_mae'],'tipo_sanguineo'=>$linha['tipo_sanguineo'],'nome_contato_urgente'=>$linha['nome_contato_urgente'],'telefone_contato_urgente_1'=>$linha['telefone_contato_urgente_1'],'telefone_contato_urgente_2'=>$linha['telefone_contato_urgente_2'],'telefone_contato_urgente_3'=>$linha['telefone_contato_urgente_3'],'observacao'=>$linha['observacao'],'certidao'=>$linha['certidao_nascimento'],'curatela'=>$linha['curatela'],'inss'=>$linha['inss'],'loas'=>$linha['loas'],'bpc'=>$linha['bpc'],'funrural'=>$linha['funrural'],'saf'=>$linha['saf'],'sus'=>$linha['sus'],'idInterno'=>$linha['id_interno'],'imgdoc'=>$linha['imgdoc'],'descricao'=>$linha['descricao'],'id_documento'=>$linha['id_documento']);
    +    public function listar($id)
    +    {
    +        echo $id;
    +        $pdo = Conexao::connect();
    +        $sql = "SELECT p.imagem,p.nome,p.sobrenome,p.cpf, p.senha, p.sexo, p.telefone,p.data_nascimento, p.cep,p.cidade,p.bairro,p.logradouro,p.numero_endereco,p.complemento,p.ibge,p.registro_geral,p.orgao_emissor,p.data_expedicao,p.nome_pai,p.nome_mae,p.tipo_sanguineo,i.nome_contato_urgente,i.telefone_contato_urgente_1,i.telefone_contato_urgente_2,i.telefone_contato_urgente_3,i.observacao,i.certidao_nascimento,i.curatela,i.inss,i.loas,i.bpc,i.funrural,i.saf,i.sus,i.id_interno,i.certidao_casamento,i.ctps,i.titulo,d.imgdoc,d.descricao,d.id_documento FROM pessoa p LEFT JOIN interno i ON p.id_pessoa = i.id_pessoa left join documento d on p.id_pessoa=d.id_pessoa WHERE i.id_interno=:id";
    +        $stmt = $pdo->prepare($sql);
    +        $stmt->bindParam(':id', $id);
    +
    +        $stmt->execute();
    +        $interno = array();
    +        while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
    +            if ($linha['cpf'] === "Não informado") {
    +                $interno[] = array('ctps' => $linha['ctps'], 'titulo' => $linha['titulo'], 'casamento' => $linha['certidao_casamento'], 'imagem' => $linha['imagem'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'cpf' => $linha['cpf'], 'senha' => $linha['senha'], 'sexo' => $linha['sexo'], 'telefone' => $linha['telefone'], 'data_nascimento' => $linha['data_nascimento'], 'cep' => $linha['cep'], 'cidade' => $linha['cidade'], 'bairro' => $linha['bairro'], 'logradouro' => $linha['logradouro'], 'numero_endereco' => $linha['numero_endereco'], 'complemento' => $linha['complemento'], 'ibge' => $linha['ibge'], 'registro_geral' => $linha['registro_geral'], 'orgao_emissor' => $linha['orgao_emissor'], 'data_expedicao' => $linha['data_expedicao'], 'nome_pai' => $linha['nome_pai'], 'nome_mae' => $linha['nome_mae'], 'tipo_sanguineo' => $linha['tipo_sanguineo'], 'nome_contato_urgente' => $linha['nome_contato_urgente'], 'telefone_contato_urgente_1' => $linha['telefone_contato_urgente_1'], 'telefone_contato_urgente_2' => $linha['telefone_contato_urgente_2'], 'telefone_contato_urgente_3' => $linha['telefone_contato_urgente_3'], 'observacao' => $linha['observacao'], 'certidao' => $linha['certidao_nascimento'], 'curatela' => $linha['curatela'], 'inss' => $linha['inss'], 'loas' => $linha['loas'], 'bpc' => $linha['bpc'], 'funrural' => $linha['funrural'], 'saf' => $linha['saf'], 'sus' => $linha['sus'], 'idInterno' => $linha['id_interno'], 'imgdoc' => $linha['imgdoc'], 'descricao' => $linha['descricao'], 'id_documento' => $linha['id_documento']);
    +            } else {
    +                $interno[] = array('ctps' => $linha['ctps'], 'titulo' => $linha['titulo'], 'casamento' => $linha['certidao_casamento'], 'imagem' => $linha['imagem'], 'nome' => $linha['nome'], 'sobrenome' => $linha['sobrenome'], 'cpf' => mask($linha['cpf'], '###.###.###-##'), 'senha' => $linha['senha'], 'sexo' => $linha['sexo'], 'telefone' => $linha['telefone'], 'data_nascimento' => $linha['data_nascimento'], 'cep' => $linha['cep'], 'cidade' => $linha['cidade'], 'bairro' => $linha['bairro'], 'logradouro' => $linha['logradouro'], 'numero_endereco' => $linha['numero_endereco'], 'complemento' => $linha['complemento'], 'ibge' => $linha['ibge'], 'registro_geral' => $linha['registro_geral'], 'orgao_emissor' => $linha['orgao_emissor'], 'data_expedicao' => $linha['data_expedicao'], 'nome_pai' => $linha['nome_pai'], 'nome_mae' => $linha['nome_mae'], 'tipo_sanguineo' => $linha['tipo_sanguineo'], 'nome_contato_urgente' => $linha['nome_contato_urgente'], 'telefone_contato_urgente_1' => $linha['telefone_contato_urgente_1'], 'telefone_contato_urgente_2' => $linha['telefone_contato_urgente_2'], 'telefone_contato_urgente_3' => $linha['telefone_contato_urgente_3'], 'observacao' => $linha['observacao'], 'certidao' => $linha['certidao_nascimento'], 'curatela' => $linha['curatela'], 'inss' => $linha['inss'], 'loas' => $linha['loas'], 'bpc' => $linha['bpc'], 'funrural' => $linha['funrural'], 'saf' => $linha['saf'], 'sus' => $linha['sus'], 'idInterno' => $linha['id_interno'], 'imgdoc' => $linha['imgdoc'], 'descricao' => $linha['descricao'], 'id_documento' => $linha['id_documento']);
                 }
             }
    -        }catch (PDOException $e){
    -            echo 'Error: ' .  $e->getMessage();
    -        }
    +
             return json_encode($interno);
         }
     
         public function listarCPF()
         {
    -        try
    -        {
    -            $cpfs = array();
    -            $pdo = Conexao::connect();
    -            $consulta = $pdo->query("SELECT cpf from pessoa p INNER JOIN interno i ON(p.id_pessoa=i.id_pessoa)");
    -            $x=0;
    -            while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
    -                $cpfs[$x] = array('cpf'=>$linha['cpf']);
    -                $x++;
    -            }
    -        }
    -        catch(PDOException $e)
    -        {
    -            echo 'Error:' . $e->getMessage();
    +        $cpfs = array();
    +        $pdo = Conexao::connect();
    +        $consulta = $pdo->query("SELECT cpf from pessoa p INNER JOIN interno i ON(p.id_pessoa=i.id_pessoa)");
    +        $x = 0;
    +        while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
    +            $cpfs[$x] = array('cpf' => $linha['cpf']);
    +            $x++;
             }
    +
             return json_encode($cpfs);
         }
     }
    -?>
    \ No newline at end of file
    

Vulnerability mechanics

Root cause

"Missing validation on the `nextPage` parameter in `InternoControle::listarTodos()` combined with an empty middleware resource whitelist that allows any authenticated user to reach the vulnerable method."

Attack vector

An attacker with any authenticated session can craft a GET request to `/WeGIA/controle/control.php` with parameters `metodo=listarTodos`, `nomeClasse=InternoControle`, and `nextPage=https://evil.example.com/phish` [ref_id=1]. Because the middleware whitelist for `InternoControle` is empty, the permission check passes for any logged-in user [ref_id=1]. The application then issues a 302 redirect with a `Location` header pointing to the attacker-supplied URL, with no validation or restriction on the destination [ref_id=1]. This allows phishing, credential theft, and malware distribution under the trusted WeGIA domain.

Affected code

The vulnerability resides in `controle/InternoControle.php` in the `listarTodos()` method, which calls `header('Location: '.$nextPage)` using the unsanitized `nextPage` parameter from `$_REQUEST` [ref_id=1]. The middleware bypass occurs in `dao/MiddlewareDAO.php`: when the resource list for a class (e.g. `'InternoControle' => []`) is empty, the permission check defaults to `$permissao = true`, allowing any authenticated user to reach the vulnerable method [ref_id=1].

What the fix does

The patch in `dao/InternoDAO.php` (commit `ed34f005139db00467959dbbb6555c11069ae57c`) removes try-catch wrappers and cleans up formatting but does not directly address the open redirect in `InternoControle.php` or the middleware bypass in `MiddlewareDAO.php` [patch_id=2713912]. The advisory states the vulnerability is fixed in version 3.7.3, but the provided patch diff does not show the actual validation logic for `nextPage` or the middleware whitelist changes [ref_id=1]. The fix presumably adds URL validation on the `nextPage` parameter and/or restricts the resource list for `InternoControle` in the middleware configuration.

Preconditions

  • authAttacker must have a valid authenticated session (any PHPSESSID)
  • configApplication must be running WeGIA version <= 3.7.2
  • networkAttacker must be able to send HTTP GET requests to the WeGIA server
  • inputThe nextPage parameter must contain an arbitrary external URL

Reproduction

Send the following HTTP request with any valid authenticated session cookie:

``` GET /WeGIA/controle/control.php?metodo=listarTodos&nomeClasse=InternoControle&nextPage=https://google.com HTTP/1.1 Host: sec.wegia.org:8000 Cookie: PHPSESSID=<any authenticated session> ```

The server responds with a `302 Found` status and a `Location: https://google.com` header, redirecting the browser to the attacker-controlled destination [ref_id=1].

Generated on May 27, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

1

News mentions

0

No linked articles in our index yet.