FORUM DARKERS

Tecnologia & Informática => Programação => PhP/Html => Topic started by: rodweb on 03 de January , 2008, 11:58:02 AM

Title: Include Seguro
Post by: rodweb on 03 de January , 2008, 11:58:02 AM
Bem, com esse código você consegue fazer seu include bem seguro...não permitindo que tentem incluir arquivos de diretórios anteriores ou que não sejam .php

Segue o código abaixo:

<?php
# Include seguro by rodweb
# msn&#46;rod@hotmail&#46;com
# 03-01-2008
if(isset($_GET['p'&#93;)){
$page $_GET['p'&#93;&#46;'&#46;php';
}

if(isset(
$page) and file_exists($page) and ereg("([\&#46;&#93;+/)+"$page)==FALSE){
echo 
'inclue';
include($page);
} else {
include('index&#46;php');
}
?>



Partes de edição opcional:

Quoteif(isset($_GET['p'])){
   $page = $_GET['p'].'.php';
}

'p' - Essa é variável passada por Get com o nome do arquivo


Quote} else {
   include('index.php');
}

'index.php' - Essa é a página padrão em caso de erro.


Façam um bom proveito e comentem aí!

Flws...
Title: Re: Include Seguro
Post by: Magrinho Loko on 03 de January , 2008, 03:03:57 PM
Pode usar também switch (//http://br.php.net/switch). É mais "profissional". :)

Porém essa forma ai seja rápida e funcional.
Title: Re: Include Seguro
Post by: rodweb on 03 de January , 2008, 03:06:08 PM
Quote from: "Magrinho Loko"Pode usar também switch (//http://br.php.net/switch). É mais "profissional". :)

Porém essa forma ai seja rápida e funcional.

Sim, usava desta maneira antes também.
Title: Re: Include Seguro
Post by: branco on 03 de January , 2008, 04:04:19 PM
e se quisermos incluir arquivos em outros diretorios ?

talvez seja melhor privar usuários mal intencionadios apenas de descer diretórios.

só sugestão ^^

até
Title: Re: Include Seguro
Post by: rodweb on 03 de January , 2008, 04:09:38 PM
Quote from: "branco"e se quisermos incluir arquivos em outros diretorios ?

talvez seja melhor privar usuários mal intencionadios apenas de descer diretórios.

só sugestão ^^

até

Hehe branco, é exatamente isso que ele faz ;)
Title: Re: Include Seguro
Post by: d3rf on 08 de January , 2008, 04:32:51 PM
Voce poderia combinar com o .htaccess as url amigaveis, ae sim ficaria top !
Vou ver se consigo e post aki
Title: Re: Include Seguro
Post by: rodweb on 08 de January , 2008, 04:36:02 PM
Sim, eu estou fazendo desse jeito agora :D

www.site.com/secaotal (http://www.site.com/secaotal)
dai inclui

Eu estava pensando em postar algo sobre isso também, usando uns exemplos com php.
Title: Re: Include Seguro
Post by: branco on 08 de January , 2008, 05:34:12 PM
hmm ótimo então ^^ nao verifiquei o código direito, sorry =]

até
Title: Re: Include Seguro
Post by: caesar2k on 12 de January , 2008, 01:21:18 AM
O melhor jeito de fazer um include seguro é sempre usar paths absolutos para os arquivos PHP. Assim, se o cara tenta loadar uma página tipo:
www.pagina.com/index.php?pagina=www.google.com (http://www.pagina.com/index.php?pagina=www.google.com)
o include seria:
$base = "http://www.pagina.com/"; // ou no caso, poderia ser um /root/pagina/public_html/
include ($base . $_GET['pagina']);
Dessa forma, fica impossível alguém incluir qualquer arquivo de script e ownar teu site.
Title: Re: Include Seguro
Post by: branco on 12 de January , 2008, 01:31:20 AM
ou desativar include de sites né ^^ no php.ini

dessas duas maneiras, ainda ficará vulneravel a diretorio transversal.

ai se aplica o ereg_replace pra retirar os pontos..

até
Title: Re: Include Seguro
Post by: rodweb on 12 de January , 2008, 09:50:34 AM
Quote from: "branco"dessas duas maneiras, ainda ficará vulneravel a diretorio transversal.

ai se aplica o ereg_replace pra retirar os pontos..

Repare aqui:
Quoteif(isset($page) and file_exists($page) and ereg("([\.]+/)+", $page)==FALSE){

Já verifica se tem ./, ../, ../../../ etc...

Mesmo assim está vulnerável?

Flws...
Title: Re: Include Seguro
Post by: branco on 12 de January , 2008, 12:18:50 PM
não rodweb, só estou dizendo que das duas maneiras, ( do caesar e a ultima que eu disse ) ainda estão vulneraveis a diretorio transversal.

com a retirada dos pontos não está mais.

até

ops, reparando seu codigo aqui, reparei que esta vul sim..

olha :

if(isset($page) and file_exists($page) and ereg("([\.]+/)+", $page)==FALSE)

significa se a URL não tiver pontos, e o file existir, vai incluir

como vc está incluindo diretamente $page

se agente fizer $page = "/etc/passwd"
irá funcionar sem precisarmos descer diretórios, pois / já significa o diretorio raiz.

agora é só concertar isso e já era ^^
preciso ir, até
Title: Re: Include Seguro
Post by: rodweb on 12 de January , 2008, 01:03:42 PM
Não não, ele bloqueia a "/" e também, os "./", "../" ;)

Desta vez eu acertei xD

Flws...
Title: Re: Include Seguro
Post by: branco on 12 de January , 2008, 06:13:46 PM
da pra vc explicar direito oque essa expressao regular faz ?

testei aqui, da pra incluir diretorios acima, então é impossivel não podermos passar para a variavel $p o valor c:\algumacoisa.txt

aguardo respostas, até
Title: Re: Include Seguro
Post by: rodweb on 12 de January , 2008, 06:46:30 PM
Quote from: "branco"da pra vc explicar direito oque essa expressao regular faz ?

testei aqui, da pra incluir diretorios acima, então é impossivel não podermos passar para a variavel $p o valor c:\algumacoisa.txt

aguardo respostas, até

Não, você passa para a variável $p, o nome do arquivo que você quer que inclua.

Ex:

http://127.0.0.1/index.php?p=teste (http://127.0.0.1/index.php?p=teste) (inclui o teste.php)

------------------

E desculpa aí, agora entendi o que você falou antes...

No windows daria pra incluir arquivos, por que usa barra invertida:

index.php?p=../teste.php (não inclui)
index.php?p=..\teste.php (inclui)

Mesmo assim só incluiria arquivos php...

Mais já arrumei, vou só postar a alteração da expressão regular no ereg:

if(isset($page) and file_exists($page) and ereg("^\.*[\/]+", $page)==FALSE){
Agora nem ../ nem ..\ ;)

Flws...
Title: Re: Include Seguro
Post by: Synyster on 13 de February , 2008, 03:15:00 AM
Bem legal cara, eu costumo validar as páginas que serão incluídas usando um array, mas essa include que vc postou ficou muito bem organizada  ;)