Jump to content

Falhas na restrição de acesso a URLs?


Rodrigo Graça
 Share

Recommended Posts

Olá pessoal, tive a ler o este tópico (http://www.portugal-a-programar.pt/index.php?showtopic=16541) e não percevi a parte que estou  citar e gostava que se alguem pudesse explicar como eu restringo o acesso a um ficheiro pelo php que explicase.

Falhas na restrição de acesso a URLs

Esta falha normalmente não representa grande risco, mas há excepções. Esta falha consiste basicamente no uso de URLs genéricos, como http://www.exemplo.com/apagar-post.php para funções administrativas, onde não há qualquer tipo de controlo de quem está a aceder ao URL. Neste tipo de falhas, não há grandes recomendações a fazer para além do ser extremamente cuidadoso nestes ficheiros com verificações como a forma como o script está a ser executado (directamente em vez do include), quem é que está a aceder, entre outros.

Para quem nõ perceveu vou dar um exemplo.

tenho uma pagina www.exemplo.com/pagina.php e a ela está restringuido o acesso sem que o o login esteja activo mas nela tem varias partes e por exemplo na parte de lado direito tem um sistema de apagar post's que é outra pagina chamada por include que está na mesma pasta e se chama apagar. O que quero que me expliquem é como é que fasso para que quando digitarem www.exemplo.com/apagar.php essa pagina não seja mostrada mas só apenas quando é chamda por include!

Link to comment
Share on other sites

Na página em que queres chamar o include, metes perto do inicio:

define("QUALQUER_COISA", true);

E depois, metes no apagar.php, mesmo no inicio:

if(!defined(QUALQUER_COISA)) exit("Esta página não pode ser acedida directamente.");

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Ficaria assim?

define("PAGINA", true);

if(!defined(PAGINA)) 
     exit("Esta página não pode ser acedida directamente.")
else{
     conteudo......
     conteudo......
     conteudo......
}

e isso é seguro?'

se fizessem uma espécie de SQL injection tipo isto:

www.exemplo.com/apagar.php?PAGINA=true

não conseguiriam entrar?

preciso de saber isso mesmo bem porque estou a pensar em fazer a minha ADMIN toda pelos include's e se acederem a eles pelo URL poderiam fazer o mesmo que fazem se login.

Cumprimentos, Rodrigo Graça.  ?

Link to comment
Share on other sites

O primeiro bloco de código está bem, mas o segundo não é preciso isso. Para o segundo basta:

if(!defined(PAGINA))     exit("Esta página não pode ser acedida directamente.");

Isto porque a função exit termina a execução da página, logo ele não passa dali.

SQL Injection aplica-se apenas a tentar inserir código malicioso numa query a uma base de dados de modo a tentar executar acções que não eram as predefinidas pelo script. Por exemplo, eleminar registos, obter registos. Não se aplica a isto. E não, não há essa falha de segurança. 🙂

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Rodrigo Graça, esse exemplo que deste só funcionaria se tivesses as register_globals activas, o que não é recomendado, e não é comum em instalações recentes.

http://php.net/manual/en/security.globals.php

Para além disso, nem sei se funcionaria, porque estás a tentar atribuir um valor a uma constante que iria ser definida mais tarde, que provavelmente daria erro. A opção que o scorch te deu serve perfeitamente e é usada em muitas aplicações web.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Guest user14912

Podes utilizar sessões, crias uma sessão na pagina.php e depois verificar se ela existe na página apagar.php.

No final eliminas a sessão, e ele só executará o código da pag "apagar.php" caso essa sessão seja valida, caso contrário redireccionas para o error.php

Link to comment
Share on other sites

Podes utilizar sessões, crias uma sessão na pagina.php e depois verificar se ela existe na página apagar.php.

No final eliminas a sessão, e ele só executará o código da pag "apagar.php" caso essa sessão seja valida, caso contrário redireccionas para o error.php

Essa solução é muito rudimentar, pois se ele já estiver a usar sessões para outra coisa como o login não as pode apagar no fim de execução da página. 🙂

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Rodrigo Graça, esse exemplo que deste só funcionaria se tivesses as register_globals activas, o que não é recomendado, e não é comum em instalações recentes.

http://php.net/manual/en/security.globals.php

Para além disso, nem sei se funcionaria, porque estás a tentar atribuir um valor a uma constante que iria ser definida mais tarde, que provavelmente daria erro. A opção que o scorch te deu serve perfeitamente e é usada em muitas aplicações web.

Na verdade não funcionaria por outro motivo: ele teria que fazer defined('PAGINA'). E independentemente das register_globals, o defined() apenas verifica CONSTANTES e não variáveis.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

Ok fiquei esclarecido.

A área que me estou a referir sim vai estar restringida por uma sessão que me trazerá mais duvidas mais tarde, mas já vi que há aqui uns tópicos sobre o assunto.

Mas pelo que vi restringir pela sessão não é aconselhável.

Só tenho mais uma duvida. Onde marco o tópico como resolvido? XD Sou novo no forum....

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.