Adampt Posted September 18, 2024 at 11:14 AM Report #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>
M6 Posted September 18, 2024 at 11:18 AM Report #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."
Adampt Posted September 18, 2024 at 12:32 PM Author Report #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.
Adampt Posted September 18, 2024 at 01:03 PM Author Report #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).
iznougudpt Posted September 18, 2024 at 03:24 PM Report #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?
M6 Posted September 18, 2024 at 05:31 PM Report #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."
Adampt Posted September 19, 2024 at 07:55 AM Author Report #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.
Adampt Posted September 19, 2024 at 07:58 AM Author Report #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.
M6 Posted September 19, 2024 at 08:43 AM Report #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."
Adampt Posted September 19, 2024 at 09:44 AM Author Report #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.
iznougudpt Posted September 19, 2024 at 03:49 PM Report #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
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