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.rod@hotmail.com
# 03-01-2008
if(isset($_GET['p'])){
$page = $_GET['p'].'.php';
}
if(isset($page) and file_exists($page) and ereg("([\.]+/)+", $page)==FALSE){
echo 'inclue';
include($page);
} else {
include('index.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 arquivoQuote} 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...
Pode usar também switch (//http://br.php.net/switch). É mais "profissional".

Porém essa forma ai seja rápida e funcional.
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.
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é
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 ;)
Voce poderia combinar com o .htaccess as url amigaveis, ae sim ficaria top !
Vou ver se consigo e post aki
Sim, eu estou fazendo desse jeito agora

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.
hmm ótimo então ^^ nao verifiquei o código direito, sorry =]
até
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.
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é
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...
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é
Não não, ele bloqueia a "/" e também, os "./", "../"

Desta vez eu acertei xD
Flws...
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é
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...
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