Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Francisco Brito

[Resolvido] Excluir registro - proteger link

Recommended Posts

Pessoal, novamente aqui para pedir uma ajuda.

 

Uso um link para excluir meus registros...

 

comandos.php?comando=excluir&codigo=331

 

Eu tenho login no sistema, esta pagina comandos.php não pode ser acessada diretamente e também faz checagem se o usuário esta logado ou não.

 

O problema é o seguinte.

 

Se o usuário estiver logado, e estiver no sistema, ele vai poder usar este link e ir substituindo o codigo=331 por 332, 333 e assim por diante.

 

Já botei a cabeça pra pensar, e não consigo pensar em uma solução para isto.

 

O que eu pensei, seria criar um valor randomico com php na hora de gravar o registro inserir este valor randomico (algo como isto = as0fd8fdsafu9a-hf89a-hfaw38q94r#$%@FDSA ) em um campo. E na hora de excluir o registro colocar WHERE cod = $cod and token= $token

 

Onde $token, seria este valor randomico.

 

Alguem consegue pensar em um jeito mais facil de fazer isto... ou esta "unica" forma que consegui pensar é realmente a UNICA ?

 

VLWS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Francisco e demais.

 

O php tem uma função chamada urlencode e outra urldecode, veja se lhe atende.

http://www.php.net/manual/pt_BR/function.urlencode.php

e

http://br2.php.net/manual/pt_BR/function.urldecode.php

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que seu problema deveria ser resolvido com permissão de usuários amigo Franciso.

Mesmo que o metodo de exclusão fosse chamado via POST ao invés de GET ou Ajax, ainda assim

seria possível alguém com conhecimento utilizar o comando direto.

 

Entenda que se o perfil do usuário é de administrador e este perfil pode excluir registros

não há muito o que se fazer. Alguém tem que ter esta permissão certo? Seja la quem for que tenha

acesso ao perfil permitido ele vai poder excluir através do sistema ou através de links.

 

A diferença é que com o perfil criado, você pode limitar o usuário a excluir apenas os registros

criados por ele ou os que compete a ele. Acredito que você deva pensar melhor nesta questão afinal,

parte da segurança tem de ser feita pelos usuários.

 

Imagina se o banco fosse totalmente responsável pela segurança sem deixar nada por conta do correntista.

Impossível não se ter prejuízos. O usuário tem que ter responsabilidade também pelo seu usuário e senha

se não a coisa não vai.

 

Nem tudo pode ser garantido através de sistema, mas muita coisa pode ser contornada de forma simples.

Criar perfis de acessos de usuários é uma boa, agora impedir que o administrador exclua registros a menos

que clique no botão, via sistema web não tem como.

 

Qualquer um que tenha conhecimento do que quer que você faça vai conseguir executar os códigos diretamente

da mesma forma. Uma vez que se esta logado e tem permissão, não há e nem tem o porque restringir certo?

Vale a pena estudar as permissões que se da a cada usuário tanto de cadastro como alteração e exclusão

de registros.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá douglas, apenas uma pergunta, se ele usar urlencode qualquer um pode decodificar com o urldecode entende?

O mesmo vale para base64_encode e base64_decode, o certo nesse caso é criar um algoritmo que faça uma criptografia e uma descriptografia dos dados. Posso estar enganado...

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

como Periscuelo disse melhor maneira é criar niveis de permissoes para os usuários.

 

Uma maneira simples é você adicionar na tabela dos usuários o grupo que ele pertence administrador, usuário etc...

e ai você pode gravar esse nivel na sessao quando ele logar e na pagina de excluir você simplesmente confirma se tem a permissão necessaria para excluir

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po galera... sobre a tabela de usuarios, já esta funcionando assim.

 

Cada usuário tem seu nivel, e direito de acessar os registros criados por ele. Administrador tem direito de acessar todos.

 

Ainda assim, acho errado deixar que seja excluido diretamente pela barra de endereços.

 

&

 

Kbeção faz assim:

 

<?php
$letras = array('a','b','c','d','e','f','g','h','i',
			'j','k','m','n','p','q','r','s','t',
			'u','v','w','x','y','z','A','B','C',
			'D','E','F','G','H','I','J','K','L',
			'M','N','O','P','Q','R','S','T','U',
			'V','W','X','Y','Z','1','2','3','4',
			'5','6','7','8','9','0','#','$','%',
			'&','*','(',')','_'); 
$tam_letras = count($letras)-1;
$num_caracteres = 35;
for($i=0;$i<$num_caracteres;$i++){
   $k = rand(0,$tam_letras);
   $palavra .= $letras[$k];
}
echo $palavra;
?>

Se quiser só numeros, tire todos os outros caracteres e deixe só os numeros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu executaria essa exclusão via AJAX, pois dessa maneira nem refresh na página teria e o usuário nem iria imaginar os tipos de parametos passados para a página de exclusão, onde está ele tambem não iria conhecer, pois tudo seria em tempo real.

 

At+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada que um tamperdata não resolva para saber dados enviados via Ajax amigo Quelipe.

Como disse, nada esta a salvo 100% mas existem maneiras melhores de se fazer

e outras coisas além do sistema para se responsabilizar. ^_^

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada que um tamperdata não resolva para saber dados enviados via Ajax amigo Quelipe.

Como disse, nada esta a salvo 100% mas existem maneiras melhores de se fazer

e outras coisas além do sistema para se responsabilizar. ^_^

 

Abraços.

 

Concordo contigo, porém nesse contexto acho que o usuário já esta numa área restrita, que obviamente ele já tem permissões de entrar e deletar registros, então não fará diferença ele usar a URL adcionando o "id" para deletar ou um "tamperdata" como você disse.

 

At+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kbeção faz assim:

 

<?php
$letras = array('a','b','c','d','e','f','g','h','i',
			'j','k','m','n','p','q','r','s','t',
			'u','v','w','x','y','z','A','B','C',
			'D','E','F','G','H','I','J','K','L',
			'M','N','O','P','Q','R','S','T','U',
			'V','W','X','Y','Z','1','2','3','4',
			'5','6','7','8','9','0','#','$','%',
			'&','*','(',')','_'); 
$tam_letras = count($letras)-1;
$num_caracteres = 35;
for($i=0;$i<$num_caracteres;$i++){
   $k = rand(0,$tam_letras);
   $palavra .= $letras[$k];
}
echo $palavra;
?>

Se quiser só numeros, tire todos os outros caracteres e deixe só os numeros.

 

show !!

x]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você não quer permitir que seja excluido pela barra de endereços, que é uma requisição GET, permita a exclusão apenas por POST, via botão de formulário ao invés de link.

 

Assim, na página que recebe a ação do botão, antes mesmo de verificar o ID do registro a ser excluído, você verifica o valor da variável de servidor ($_SERVER) REQUEST_METHOD.

 

Se POST, aceita e continua. Se não for, aborta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu tive uma ideia aqui, mas não sei se vai contra as regras de database.

E se o id, ao inves de numérico auto incrementável, fosse um varchar ou longtext e sempre que ele fosse inserir registro na tabela, ele usasse um random com letras/palavras e encriptasse em md5? Acredito eu que o trabalho que o banco teria para usar como index um hash md5 seria muito pior do que usar apenas números auto incrementáveis, mas se é de segurança que estamos falando, talvez o gasto valha a pena.

 

Outra coisa, marcaram como resolvido o tópico, mas qual foi a solução adotada pelo autor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, ñ sei a resposta para seu problema, mas tbm gostaria de saber, como criar um valor randômico numérico.

 

Função rand

 

$foto = rand(1,3000);
// gerando um número de 1, a 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

o.O

 

Topíco velho...

 

Ainda... continuo na mesma. Ta rodando do mesmo jeito. Usuários e permissões e cara registro tem um campo chamado token onde armazeno um numero randômico.

 

Ainda continuo achando tudo que foi postado aqui errado. LOL. Até mesmo por formulário e botão submit com metodo post.

 

O problema é aquele de sempre. Usuários são usuários... e tenha certeza, se eles puderem fazer alguma coisa pra ferrar com tudo, eles vão fazer. Voces sabem né, aquela velha mania de futricar em tudo.

 

O certo certo certo mesmo, seria ter isso no sistema, pra mesmo que se o "fuçador" quiser fuçar, não ter jeito.

 

Por enquanto... estou utilizando a minha maldita invenção... o tal do $token.

 

As vezes também acho que estou exagerando, pois como amigo ali em cima já disse... cada usuário so pode apagar um registro que foi criado por ele mesmo, então se o fuçador apagar, vai apagar algo que ele mesmo fez. Mas realmente, hoje estava mechendo no sistema novamente e me veio de novo esta maldita "questão" na cabeça e pensei: "Perai, isso aqui ta errado!". Ai lembrei do post e vim aqui dar uma olhada novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.