Adampt Posted September 18, 2024 at 11:14 AM Report Share #633531 Posted September 18, 2024 at 11:14 AM 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 More sharing options...
M6 Posted September 18, 2024 at 11:18 AM Report Share #633532 Posted September 18, 2024 at 11:18 AM 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 More sharing options...
Adampt Posted September 18, 2024 at 12:32 PM Author Report Share #633533 Posted September 18, 2024 at 12:32 PM 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 More sharing options...
Adampt Posted September 18, 2024 at 01:03 PM Author Report Share #633534 Posted September 18, 2024 at 01:03 PM 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 More sharing options...
iznougudpt Posted September 18, 2024 at 03:24 PM Report Share #633536 Posted September 18, 2024 at 03:24 PM Qual é a utilização do código? Algum trabalho/projecto ou algo para utilização real? Link to comment Share on other sites More sharing options...
M6 Posted September 18, 2024 at 05:31 PM Report Share #633537 Posted September 18, 2024 at 05:31 PM 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. 1 Report 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 More sharing options...
Adampt Posted September 19, 2024 at 07:55 AM Author Report Share #633539 Posted September 19, 2024 at 07:55 AM Em 18/09/2024 às 16:24, iznougudpt disse: Qual é a utilização do código? Algum trabalho/projecto ou algo para utilização real? Por enquanto é um projeto, mas que futuramente será utilizado na realidade. Link to comment Share on other sites More sharing options...
Adampt Posted September 19, 2024 at 07:58 AM Author Report Share #633540 Posted September 19, 2024 at 07:58 AM 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 More sharing options...
M6 Posted September 19, 2024 at 08:43 AM Report Share #633541 Posted September 19, 2024 at 08:43 AM 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. 1 Report 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 More sharing options...
Adampt Posted September 19, 2024 at 09:44 AM Author Report Share #633543 Posted September 19, 2024 at 09:44 AM Em 19/09/2024 às 09:43, M6 disse: framework como Yii2 ou Lavarel Vou analisar e estudar estas opções, pois nunca utilizei nenhuma delas. Nunca tinha ouvido falar da Yii2. Link to comment Share on other sites More sharing options...
iznougudpt Posted September 19, 2024 at 03:49 PM Report Share #633544 Posted September 19, 2024 at 03:49 PM 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. 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now