Jump to content

Bloquear acesso direto a página


Adampt

Recommended Posts

Olá amigos.

Preciso bloquear o acesso à página de edição de dados de um determinado jogador que faz parte de uma determinada equipa. Apenas um utilizador (diretor da equipa) registado e com login efetuado pode aceder a esta página (até aqui tudo bem) para alterar os dados desse jogador. 

Pretendo bloquear esta página para que o acesso seja feito apenas a partir de um boão (editar) colocado à frente do nome do jogador e não com copy/paste do link ou com alteração dos dados que aparecem no link como seja, o id do jogador e o id da equipa.

Já tentei várias soluções mas sem sucesso.

 

O botão editar tem o seguinte código

<a href='fedit_elementogrupo.php?idelemento=<?php echo $linhas['idgel']; ?>&idgrupo2=<?php echo $grupo; ?>'> <button type='button' class='btn btn-xs btn-warning' name='edit' id='edit'><?php echo $lang['ede2']  ?></button></a>

 

Link to comment
Share on other sites

O que pretendes não é possível de fazer.
Se tens um link num botão, é sempre possível copiar o link e colá-lo numa nova tab no browser.
O que tens de fazer é garantir que quem está a aceder à página tem autorização para o fazer e só verá/acederá o que deve ver/aceder.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Em 18/09/2024 às 12:18, M6 disse:

O que tens de fazer é garantir que quem está a aceder à página tem autorização para o fazer e só verá/acederá o que deve ver/aceder

Isso está garantido.

 

Agora o problema é que se no llink eu colocar o id de outro jogador que não seja da minha equipa consigo visualizar e alterar os dados desse jogador. E isso não pode acontecer.

Link to comment
Share on other sites

Consegui resolver.

Não sei se é da maneira mais correta mas está a funcionar.

Mudei o código do botão para 

<form action="endercodapaginaweb.php?idelemento=<?php echo $linhas['idgel']; ?>&idgrupo2=<?php echo $grupo; ?>" method="POST" enctype="multipart/form-data">
              <a> <button type='submit' class='btn btn-xs btn-alert' name='edit' id='edit'>teste</button></a>
            </form>

E na página de edição de dados coloquei o seguinte código

 <?php if (!isset($_POST['edit'])) {     
    header("Location: javascript:history.back(-1)");
    }
?>

Assim, se houver post ficamos na página; se não houver, ele retorna para a página anterior (seja ela qual for).

Link to comment
Share on other sites

On 9/18/2024 at 1:32 PM, Adampt said:

Isso está garantido.

 

Agora o problema é que se no llink eu colocar o id de outro jogador que não seja da minha equipa consigo visualizar e alterar os dados desse jogador. E isso não pode acontecer.

Vamos por partes.

Se estivesse garantido que quem está na página é quem devia estar então não terias o problema que tens.
Nunca vais conseguir garantir isso com a questão do link no botão.

A tua implementação de mudar o GET para POST é tão fácil de quebrar que nem vale a pena o esforço de o descrever.

 

Não podes ter a identificação do utilizar a "passear" entre o browser e o servidor, se o GET te expõe isso no URL, o POST mostra tudo na consola de debug do browser.
O que tens de fazer é, repito, garantir que quem está a aceder à página é quem lá pode estar a aceder.
Isso tens de fazer sempre do lado do servidor.

Presumo que tenhas algum método de autenticação de utilizadores. Nesse método deves guardar em sessão (que fica do lado do servidor e não é exposto no browser) a informação do utilizador que está autenticado.
Quando o utilizador invoca um URL, seja porque carregou no botão, fez copy-paste do link ou simulou um POST, tens de ir à sessão, obter a informação do utilizador que está autenticado e verificar se esse utilizador pode aceder a essa página ou não.

  • Vote 1
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Em 18/09/2024 às 18:31, M6 disse:

Presumo que tenhas algum método de autenticação de utilizadores. Nesse método deves guardar em sessão (que fica do lado do servidor e não é exposto no browser) a informação do utilizador que está autenticado.
Quando o utilizador invoca um URL, seja porque carregou no botão, fez copy-paste do link ou simulou um POST, tens de ir à sessão, obter a informação do utilizador que está autenticado e verificar se esse utilizador pode aceder a essa página ou não.

Sim, tenho um sistema de autenticação de utilizadores.

Já tentei fazer isso, mas não estou a conseguir. Também já pensei em enviar a informação via GET, mas encriptada e depois desencriptar na outra página.

Não sei qual a melhor opção ou como posso fazer para que o utilizador não acesse aos dados de um jogador se não pertencer à sua equipa.

Link to comment
Share on other sites

Só tens uma opção realista: fazer autenticação e guardar a informação do lado do servidor.
Se guardares informação do lado do servidor, o sistema fica exposto e compromentido.

Podes usar uma framework como Yii2 ou Lavarel que têm de raíz funcionalidades como autenticação, permissões, acessos, perfis, etc. e que permitem fazer o que necessitas de forma simples e rápida.
Por exemplo, em Yii2, numa linha de código garantes que o utilizador que está a tentar aceder à página pode mesmo aceder à página.

  • Vote 1
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

A questão da autenticação é muito simples, crias uma query que recebe o id do jogador e o utilizador autenticado, se o utilizador tiver permissões para esse id continuas, caso contrário retornas um erro a dizer permissões negadas ou algo assim.

A validação tem de ser SEMPRE do lado do servidor, tudo o resto como já foi referido é demasiado fácil de anular. Mesmo a informação recebida quer seja por POST ou GET tem de ser sempre validada para impedir ataques como SQL Injection e afins.

Podias criar um parâmetro encriptado que contivesse o ID do jogador para validar que o ID enviado por POST não tinha sido alterado, mas o melhor é implementares do lado do servidor.

  • Vote 1
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
×
×
  • 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.