Jump to content


Photo

Protegendo Página


  • Faça o login para participar
16 replies to this topic

#1 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 04/12/2009, 08:20

Olá pessoal....eu de novo.....

Agora eu quero fazer uma pergunta....tenho uma página e estou usando include.....no menu passo link da seguinte forma:

<A href="index.php?pagina=contato"> <DIV align=right><SPAN class=style1>Contato</SPAN></DIV> </A>

E no navegador ele exibe assim: http:www.exemplo.com.br/index.php?pagina=contato

Bom estava lendo sobre segurança e vi q páginas desse tipo estão mais sujeitas a invasão.....vi que a pessoa pode tentar passar um link mal intencionado e invadir BD por exemplo:
http:www.exemplo.com.br/index.php?pagina=codigo_mal_intecionado.html ....bom,no meu index.php criei um script q bloqueia a tentativa de passar um endereço depois de "=" .....mais gostaria de saber se tem um jeito de usar include sem passar o link dessa forma no navegador....essa forma q usei é errada? ainda se usa?

Aguardo respostas....

#2 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 04/12/2009, 08:41

O que pode acontecer neste caso é semelhante o que aconteceu com o site da Vivo.

Por exemplo, um link como esse que você citou: site.com.br/pagina=contato

Sendo aberto desse jeito:

include($_GET['pagina'] . '.php');

É extremamente perigoso, pois como aconteceu com o site da Vivo, o invasor simplesmente tentou algo assim:

site.com.br/pagina=/etc/passwd

Não lembro direito qual foi a tentativa, mas baseado nisto, dando um include no arquivo de senhas do servidor já era.

Uma das soluções é você filtrar o máximo possível estas variáveis que você passar pela URL, fazendo uma verificação se o arquivo existe, se você autoriza e etc.

[]'sAté mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#3 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 04/12/2009, 08:54

O que pode acontecer neste caso é semelhante o que aconteceu com o site da Vivo.

Por exemplo, um link como esse que você citou: site.com.br/pagina=contato

Sendo aberto desse jeito:

include($_GET['pagina'] . '.php');

É extremamente perigoso, pois como aconteceu com o site da Vivo, o invasor simplesmente tentou algo assim:

site.com.br/pagina=/etc/passwd

Não lembro direito qual foi a tentativa, mas baseado nisto, dando um include no arquivo de senhas do servidor já era.

Uma das soluções é você filtrar o máximo possível estas variáveis que você passar pela URL, fazendo uma verificação se o arquivo existe, se você autoriza e etc.

[]'s




Certo.....no meu index.php eu coloquei o seguinte código para proteger contra o sql injection:

<?				$pagina = @$_GET["pagina"];				if(file_exists("$pagina.php"))				{					include("$pagina.php");				}															else 				{					if($pagina == '')					{						include("home.php");					} 					else 					{						include("erro.php");					}				}			?>

Pelos testes q fiz aqui....eu não consigo passar um outro endereço ...ele cai na página de ERROR...... isso é suficiente? Existe uma forma de usar include sem passar o link dessa forma no navegador?

#4 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 04/12/2009, 09:06

Acho que a melhor forma, além de verificar a existência do arquivo é criar condições com esta variável vinda da URL, por exemplo:

if ($pagina == 'contato') {
	include ('contato.php');
}

Pois assim evita de alguém tentar incluir uma página que realmente existe mas não é sua intenção exibir.

[]'sAté mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#5 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 04/12/2009, 09:16

Acho que a melhor forma, além de verificar a existência do arquivo é criar condições com esta variável vinda da URL, por exemplo:

if ($pagina == 'contato') {
	include ('contato.php');
}

Pois assim evita de alguém tentar incluir uma página que realmente existe mas não é sua intenção exibir.

[]'s


Mais eu fazendo desse jeito vou ter vários "ifs" ..não vou.....optei por fazer do jeito q postei.....para evitar usar tanto if......

#6 brunoXP

brunoXP

    EFEI EÔ

  • Conselheiros
  • 2226 posts
  • Sexo:Masculino
  • Localidade:Campinas/Itajubá

Posted 04/12/2009, 10:02

Sim, você terá um if para cada página do site.
Só que, em seu favor, protegerá completamente seu site contra qualquer tipo de uso mal-intencionado.

A não ser que você crie um vetor de páginas permitidas, e verifique na passagem da página como parâmetro (antes de carregá-la, claro) se ela consta nesse vetor.
É mais braçal, mas criando esse vetor em um arquivo à parte, o processo passa a ser simplesmente dar um include nesse arquivo do vetor e comparar a página a ser montada com ele.

Abraços,
Bruno Toffolo
· Conselho / WebFórum

#7 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 04/12/2009, 10:25

Sim, você terá um if para cada página do site.
Só que, em seu favor, protegerá completamente seu site contra qualquer tipo de uso mal-intencionado.

A não ser que você crie um vetor de páginas permitidas, e verifique na passagem da página como parâmetro (antes de carregá-la, claro) se ela consta nesse vetor.
É mais braçal, mas criando esse vetor em um arquivo à parte, o processo passa a ser simplesmente dar um include nesse arquivo do vetor e comparar a página a ser montada com ele.

Abraços,


Minha pergunta...esse metodo q estou usando ......ainda se usa? Existe uma forma de esconder essa forma que aparece no navegador: site.com.br/pagina=contato?




#8 brunoXP

brunoXP

    EFEI EÔ

  • Conselheiros
  • 2226 posts
  • Sexo:Masculino
  • Localidade:Campinas/Itajubá

Posted 04/12/2009, 10:36

Sim, este método que você implantou ainda se usa.
Porém os programadores costumam restringir as páginas passíveis de montagem, utilizando os métodos citados pelo PA anteriormente nesse tópico.

Até mesmo para evitar brechas de segurança... é sempre bom, não? :)

Quanto a esconder a forma com que isso aparece, creio que o máximo que se possa fazer é usar um script para converter o link em um estilo que pareça uma pasta, do tipo site.com.br/contato, redirecionando para site.com.br/contato.php. Ou seja, retirar a extensão dos arquivos pra dar uma mascarada.
Não sei direito como se implementa, mas procure no fórum que devem existir dúvidas relacionadas a isso. Este artigo deve ajudar: http://www.brasilseo...nismos-de-busca

Abraços,
Bruno Toffolo
· Conselho / WebFórum

#9 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 04/12/2009, 10:40


Sim, você terá um if para cada página do site.
Só que, em seu favor, protegerá completamente seu site contra qualquer tipo de uso mal-intencionado.

A não ser que você crie um vetor de páginas permitidas, e verifique na passagem da página como parâmetro (antes de carregá-la, claro) se ela consta nesse vetor.
É mais braçal, mas criando esse vetor em um arquivo à parte, o processo passa a ser simplesmente dar um include nesse arquivo do vetor e comparar a página a ser montada com ele.

Abraços,


Minha pergunta...esse metodo q estou usando ......ainda se usa? Existe uma forma de esconder essa forma que aparece no navegador: site.com.br/pagina=contato?




Sim!
Faça uma pequena pesquisa por URL Amigável.
Se tiver algum problema é só voltar aqui!

Abraços e uma ótima sexta para você!
Mateus
Mateus Antunes
MBASistemas

#10 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 04/12/2009, 14:37

Eu acho bem mais prático criar um array com as páginas permitidas e depois verificar com in_array().

<?php

$paginas = array('contato', 'servicos', 'portfolio');
$pagina = $_GET['pagina'];

if (in_array($pagina, $paginas)) include $pagina.".php";
else include "erro.php";

?>

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#11 brunoXP

brunoXP

    EFEI EÔ

  • Conselheiros
  • 2226 posts
  • Sexo:Masculino
  • Localidade:Campinas/Itajubá

Posted 04/12/2009, 15:00

Eu acho bem mais prático criar um array com as páginas permitidas e depois verificar com in_array().

<?php

$paginas = array('contato', 'servicos', 'portfolio');
$pagina = $_GET['pagina'];

if (in_array($pagina, $paginas)) include $pagina.".php";
else include "erro.php";

?>

(ok2)

Isso, SemPonto. Quando eu falei de vetores eu me referi a arrays. :P
Programador iniciante acostumado com C++ é duro ... hahahaha
Bruno Toffolo
· Conselho / WebFórum

#12 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 04/12/2009, 15:09

Eu entendi quando você disse vetores. Faltou só um exemplo né... :P
att,
Muller Dias
ex-administrador Fórum WMO

#13 Fábio Web Arts

Fábio Web Arts

    Web IN Arts

  • Usuários
  • 299 posts
  • Sexo:Masculino
  • Localidade:No Saco De Magé
  • Interesses:Tudo que for da área de Informática

Posted 04/12/2009, 15:19

[codebox] $pag = addslashes(htmlentities($_GET['page']));
$sub = addslashes(htmlentities($_GET['sub']));
if($pag{1}){

if (is_file($pag.'/'.$sub.'.php'))
{
include($pag.'/'.$sub.'.php');
}
elseif(is_file($pag.'.php'))
{
include($pag.'.php');
}
elseif(is_file($pag.'/index.php'))
{
include($pag.'/index.php');
}
else
{
include('404.php');
}
}
else
{
// Caso o arquivo não exista inlue a padrão
include('home.php');
}[/codebox]

eu uso esse!

#14 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 04/12/2009, 15:32

Eu entendi quando você disse vetores. Faltou só um exemplo né... :P


Eu vou utilizar usar os arrays = vetores.......rsrs...:)

Só uma coisa....acho q foi o Bruno XP que falou sobre mascarar o link no navegador: site.com.br/pagina=contato usando url_amigaveis......eu fiz porém gerou um erro no servidor.....estou sem tempo para refazer....qnd tiver livre ...eu posto o erro aqui.....

Oq mais vcs me sugerem para deixar a página mais segura?


#15 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 06/12/2009, 16:28


Eu entendi quando você disse vetores. Faltou só um exemplo né... :P


Eu vou utilizar usar os arrays = vetores.......rsrs...:)

Só uma coisa....acho q foi o Bruno XP que falou sobre mascarar o link no navegador: site.com.br/pagina=contato usando url_amigaveis......eu fiz porém gerou um erro no servidor.....estou sem tempo para refazer....qnd tiver livre ...eu posto o erro aqui.....

Oq mais vcs me sugerem para deixar a página mais segura?


Eu vou utilizar usar os arrays = vetores.......rsrs...:)

Só uma coisa....acho q foi o Bruno XP que falou sobre mascarar o link no navegador: site.com.br/pagina=contato usando url_amigaveis......eu fiz porém gerou um erro no servidor.....estou sem tempo para refazer....qnd tiver livre ...eu posto o erro aqui.....

Oq mais vcs me sugerem para deixar a página mais segura?





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq