Ir para conteúdo

POWERED BY:

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 violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
×

Informação importante

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