Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Valdir Rospirski

Jquery com Ajax, usando History.js e RewriteEngine

Recommended Posts

Olá a todos, estou desenvolvendo um script para navegação sem refresh. Fiz apenas o básico ainda e aparentemente está funcionando, gostaria da opinião de vocês para saber o que posso melhorar e se da maneira que eu fiz vou ter dores de cabeça com o script.

Este seria o Script que faz as requisições Ajax

<script type="text/javascript">
            jQuery(document).ready(function () {
                $("body").delegate("a", "click", function () {
                    link = $(this).attr('href').replace("<?php $config->getHome(); ?>", "");
                    history.pushState(null, link, this.href);
                    ajaxLoader();
                    return false;
                });

                $(window).on('popstate', function (e) {
                    ajaxLoader();
                });

                function ajaxLoader() {
                    $.ajax({
                        url: '<?php $config->getHome(); ?>paginas.php',
                        type: 'POST',
                        data: 'link=' + window.location.href.replace("<?php $config->getHome(); ?>", ""),
                        success: function (data) {
                            $(".master").html(data);
                        }
                    });
                }

            });
        </script>

Uso este replace para remover o link do site, no caso o http://.....com.br. Assim ele vai pegar apenas o que vier depois, como contatos/ quemsou/, etc.

 

 

Corpo Body

<body>
        <?php
        require_once ("paginas/topo.php");
        //require_once ($url->setPagina());
        ?>
        <div class="master"><?php require_once ("paginas.php"); ?></div>
        <?php
        require_once ("paginas/rodape.php");
        ?>
    </body>

Páginas.php

<?php

require_once ("includes/classes/configs.php");
if (isset($_POST['link'])) {
    $link = $_POST['link'];
} else {
    $link = substr($_SERVER['QUERY_STRING'], 5);
}
require_once ($url->setPagina($link));
?>

Este substr é para tirar o link= que configurei pelo htaccess como variavel.

 

htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?link=$1

e a classe que cuida das url

<?php

class url {

    private $link;

    public function __construct() {
        
    }

    public function getRequire($require) {
        return "paginas/" . $require . ".php";
    }

    public function setPagina($link) {
        $this->link = explode("/", $link);
        if (empty($this->link[0])) {
            return $this->getRequire("home");
        } elseif (file_exists("paginas/" . $this->link[0] . ".php")) {
            return $this->getRequire($this->link[0]);
        } else {
            return $this->getRequire("404");
        }
    }

}

Aparentemente está funcionando tudo normal, no entanto tenho medo esse script ficar alguma vulnerabilidade no meu código.

Obs: este <?php $config->getHome(); ?> chama a url do site, que fica configurada num arquivo de config, no caso http://localhost/website/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em primeiro lugar, a melhor maneira seria testando o site também (online), porque fica complicado apenas com o código.

 

E olhando o código, me parece que está vulnerável à LFI (Local File Include). É uma falha de moderada à grave, pois em alguns casos é possível até fazer upload de arquivos e executar comandos no servidor. Onde eu vejo este problema, é na função setPagina da classe url. Mas reitero, para testar melhor o site, ele teria que estar disponível para acesso (já no servidor).

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Carcleo
      Estou começando no Laravel 11 e me deparei com um problema de belongsTo
       
      public function listOfClass(Request $request, StudentDisciplineClassroom $sdc) : ?string {         $all = $sdc::select('student')->with('studentRelation')->where('classroom',$request->classroom)->distinct('student')->get();     dd($all->toArray());     $students = [];     foreach ($all as $student) {             $students[] =$student;     }       return response()->json($students)->getContent();     } isso

      Em studentRelation temos na tabela StudentDisciplineClassroom com os campos

      id(chave primaria)
      ra (chave estrangera que referencia o campo academic_registration na tabela de students)

      e a tabela student tem os campos

      id (chave primária)
      academic_registration (que vai ser refeenciada na tabela StudentDisciplineClassroom

      Mas na hora de fazer
      $sdc::select('student')->with('studentRelation')->where('classroom',$request->classroom)->distinct('student')->get();
      O studentRelation retorna nulo

      Onde eu posso estar errando?
    • Por joao b silva
      Tenho uma pequena aplicação em php que gera arquivos pdf com a MPDF e envia email com a PHPMAILER. De repente a app parou de enviar os emails  e apresenta a seguinte mensagem de erro:
       
      Error PHPMailer: SMTP Error: Could not authenticate.
       
      Faço uso de um hotmail para a configuração do PHPMAILER.
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos.
       
      Quando programava em DOS. utilizava algumas teclas de atalho para: SALVAR / EDITAR / EXCLUIR / IMPRIMIR.
      Por exemplo:
      Salvar ----> ALT+S
      Editar ----> ALT+E
      Excluir --> ALT+X
      Imprimir -> ALT+I

      no PHP tem como colocar esses ATALHOS nos button, para o usuário trabalhar com esses atalhos e como seria ?

      grato,
       
      Cesar
    • Por violin101
      Caros Amigos, saudações.
       
      Por favor, me perdoa em postar uma dúvida.
       
      Preciso criar uma Rotina onde o usuário possa buscar na Base de Dados de Produtos, tanto por Código e Descrição, ou seja:
      - caso o usuário digita o Código, mostra os dados do Produto.
      - caso o usuário digita a Descrição, mostra os dados do Produto
       
      Fiz uma Rotina, onde o usuário digita a DESCRIÇÃO com a função AUTOCOMPLETE.    <=== está funcionando certinho.
       
      Minha dúvida é como faço para DIGITAR o Código e mostrar os dados também.
       
      o meu AutoComplete na MODEL está assim.
      public function autoCompleteProduto($q){ $this->db->select('*' ) ->from('produtos') ->where('produtos.statusProd',1) ->like('descricao', $q) ->limit(5) ->order_by('descricao', 'ASC'); $query = $this->db->get(); if ($query->num_rows() > 0) { foreach ($query->result_array() as $row) { $row_set[] = ['label' => str_pad($row['idProdutos'], '5', '0', STR_PAD_LEFT).' - '.$row['descricao'], 'id' => $row['idProdutos'], 'descricao' => $row['descricao'], 'cod_interno' => $row['cod_interno'], 'prd_unid' => $row['prd_unid'], 'estoque_atual' => $row['estoque_atual'] ]; } echo json_encode($row_set); } }  
       
      no CONTROLLER está assim:
      public function autoCompleteProduto() { $this->load->model('estoque/lancamentos_model'); if (isset($_GET['term'])) { $q = strtolower($_GET['term']); $this->lancamentos_model->autoCompleteProduto($q); } }  
       
      na VIEW está assim:
      <div class="col-md-10"> <label for="idProdutos">Produto:</label> <input type="hidden" name="idProdutos" id="idProdutos"> <input type="text" class="form-control" id="descricao" name="descricao" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por descrição do produto" disabled> </div>  
      VIEW + JAVASCRIPT
       
      //Função para trazer os Dados pelo o AutoComplete. function resolveAutocomplete() { $("#descricao").autocomplete({ source: "<?php echo base_url(); ?>estoque/lancamentos/autoCompleteProduto/", minLength: 2, select: function (event, ui) { $("#idProdutos").val(ui.item.id); $("#cod_interno").val(ui.item.cod_interno); $("#descricao").val(ui.item.descricao); $("#prd_unid").val(ui.item.prd_unid); $("#estoque_atual").val(ui.item.estoque_atual); $("#qtde").focus(); } }); } // inicia o autocomplete resolveAutocomplete();  
      Grato,
       
      Cesar
    • Por belann
      Olá!
       
      Estou tentando criar um projeto laravel e está dando o seguinte erro 
      curl error 60 while downloading https://getcomposer.org/versions: SSL certificate problem: unable to get local issu
        er certificate
      Já tentei atualizar o composer, mas dá o mesmo erro acima.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.