Ir para conteúdo

POWERED BY:

Arquivado

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

Artur_php

Problemas com URL

Recommended Posts

Boa tarde amigos.

 

No meu site use um código para inserir as páginas

 

 

<!-- INICIO DO CONTEUDO DO SITE //-->
      <?php
      
    if (isset($_GET['p'])){
        $pagina = $_GET['p'];
        include "$pagina.php";
        if (file_exists("$pagina.php")) {
    echo "";
} else {
    include "erro.php";
}
    } else {
        include "home.php";
    }
      
      ?>
        <!-- FIM DO CONTEUDO DO SITE //-->

 

 

Se o link for

 

http://redeautos.com/?p=concessionarias

ele insere a página concessionárias.php .

 

 

Ele pega a pagina a ser inserida através do $_GET['p'] . O problema é que se alguem usar por exemplo o link

http://redeautos.com/?essapaginanaoexiste=erro

, o site é redirecionado para a pagina principal e não para uma pagina de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  if (isset($_GET['p'])){
        $pagina = $_GET['p'];
        include "$pagina.php";
        if (file_exists("$pagina.php")) {

 

coloque tb uma condicional para impedir isso>

 

http://redeautos.com/?p=index

 

 

 

* evite expor desse modo... poderia ter colocado um outro link qualquer de exemplo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela força Viniciuswebdev e Hinom. Hinom, valeu pela dica da exposição.

 

 

O problema está com o $_GET['p']; . vou tentar explicar direito.

 

Através do $_GET['p']; , o código pega o que estiver em 'p' e insere.

 

por exemplo:

/p=paginaqueexiste , vai ser inserida paginaqueexite.php

/p=paginaquenaoexiste, vai ser inserida erro.php (erro.php vai para redirecionar para home .php)

até aqui ok.

 

Quando o link é:

/outravariavelquenaop=paginaqueexiste nada é inserido, pois a pagina a ser inserida é pegada através do $_GET['p']; e não do $_GET['outravariavelquenaop'];

Compartilhar este post


Link para o post
Compartilhar em outros sites
    } else {
        // nesse ponto 'p' não existe.
        // porém, o usuário pode ter inserido   http://site/outravariavelquenaop=foo
        // faça a consistência capturando a URI antes de ir direto para home.php..
        // $_SERVER['REQUEST_URI']





        include "home.php";
    }

independente disso, aconselho a estruturar melhor.. pode reduzir 60% desse script

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta este código aqui

 

if (isset($_GET['p'])){
    
    $pagina = $_GET['p'];
        
    if (file_exists("$pagina.php")) {
    
    	include "$pagina.php";

	} else {

    	include "erro.php";

	}

}else{

	include "home.php";

}

 

O que estava acontecendo?

Se o $_GET['p'] exitise, você incluia a página no seu site, só depois de incluir a página que você fazia uma verificação pra saber se a página existe, se ela não existe vc incluia TAMBÈM a pagina erro.php, ta entendendo?

 

O que foi feito agora?

Antes de incluir a página, verificamos se a mesma existe, se existir incluimos ela, se não existir incluimos a página erro.php, e se não existir o $_GET['p'] nós incluimos o arquivo home.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Artur,

Sei que não é este o foco da sua dúvida, mas me vejo na obrigação de te informar para evitar problemas futuros. A sua URL quando "inclui" via GET as páginas se torna vulnerável a uma falha conhecida como SQL Injection, que consiste em realizar consultas ao banco de dados via URL. Aconselho você a pesquisar sobre esta falha, existe uma função que serve para evitar esta falha. O nome dela é mysql_real_scape_string, pesquise tutoriais sobre como usa-la.

Abraços, Diogo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

#11... desculpe refutar o seu post, mas não há relação alguma com SQL

 

Tem sim companheiro. Esperimente por exemplo digitar uma aspas ao lado do parametro "p"; ira aparecer um erro de consulta ao banco de dados, o que posteriormente, pode ser injetados consultas SQL...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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