Bom pessoal,desenvolvi uma página para exclusão de registro no MYSQL por meio do PHP e ne método GET.
O script está rodando muito bem,porém há uma falha de segurança gravissíma. Se eu colocar na URL o código do id do usuário e apertar enter,posso excluir sem nem mesmo clicar para excluir. O código é esse e que é usado no GET:
lista_usuario.php?id_usuario=1
Basta eu olhar a lista dos usuários,saber o id e fazer nesse método que consigo excluir qualquer registro pela URL.
Usei o "md5" para criptografar os dados na hora em que exibo,ai fica uma coisa assim:
Porém, o meu tipo de registro do id do usuário é em apenas numeros. E com o MD5,não consigo gravar no BD.
Como posso fazer para corrigir tais problemas?
Usar o MD5 criptografar na URL, ou então fazer algum outro método?O que quero é simplesmente deletar com segurança,e não dando brechas na URL,mesmo sendo GET.
Acho que é isso.Aqui eu posto meu código com as configurações.
PÁGINA ONDE EXIBO OS DADOS DO SQL E DELETO:
AQUI É A MINHA CLASSE ONDE ESTÃO AS FUNÇÕES PARA DELETAR E OUTRAS:
<?php
require ('db.php');
class User{ //Definindo a classe User
var $id_usuario;
var $nome;
var $login;
var $senha;
var $esta_salvo;
function __construct($id_usuario){ //Função com base na chave primária do id_usuario
$sql = "SELECT nome, login, senha FROM usuarios WHERE id_usuario = '$id_usuario';";
$query = mysql_query($sql);
if($query->mysql_num_rows>0){
$info = $query->mysql_fetch_object($sql);
$this->nome = $info->nome;
$this->login = $info->login;
$this->senha = $info->senha;
$this->id_usuario = $id_usuario;
}
}
function lista_user(){
$users = $_REQUEST['id_usuario'];
if($users !=""){
//$users = md5($this->id_usuario);
$sql = mysql_query("DELETE FROM usuarios WHERE id_usuario = '$users'");
if($sql){
echo "<div id=content><script type=text/javascript>showDialog('SUCESSO!','<h3>SUA REQUISIÇÃO FOI BEM EXECUTADA.</h3>','success')</script></div>";
echo "<p class=ttp><strong>DADOS DELETADOS CORRETAMENTE!!!</strong></p>";
}else{
echo "<p class=ttp>ERRO AO DELETAR CADASTRO!!!</p>";
}
}
}
}
?>
Pergunta
Carlohcs
Bom pessoal,desenvolvi uma página para exclusão de registro no MYSQL por meio do PHP e ne método GET.
O script está rodando muito bem,porém há uma falha de segurança gravissíma. Se eu colocar na URL o código do id do usuário e apertar enter,posso excluir sem nem mesmo clicar para excluir. O código é esse e que é usado no GET:
Basta eu olhar a lista dos usuários,saber o id e fazer nesse método que consigo excluir qualquer registro pela URL. Usei o "md5" para criptografar os dados na hora em que exibo,ai fica uma coisa assim: Porém, o meu tipo de registro do id do usuário é em apenas numeros. E com o MD5,não consigo gravar no BD. Como posso fazer para corrigir tais problemas? Usar o MD5 criptografar na URL, ou então fazer algum outro método?O que quero é simplesmente deletar com segurança,e não dando brechas na URL,mesmo sendo GET. Acho que é isso.Aqui eu posto meu código com as configurações. PÁGINA ONDE EXIBO OS DADOS DO SQL E DELETO:<noscript><h4><font color="#FFFFFF">PARA USAR CORRETAMENTE O SITE, ATIVE O JAVASCRIPT DO NAVEGADOR</font></h4></noscript> <html> <title>LISTA | Usuário</title> <head> <link rel="stylesheet" href="default.css" type="text/css"> <script src="dialog/dialog_box.js" text="text/javascript"></script> <link rel="stylesheet" href="dialog/dialog_box.css" type="text/css"> </head> <body> <div class="full"> <h3 class="sub" style="background-image: url(media/top.png);">USUÁRIOS REGISTRADOS <img src="media/icons/user.gif"></h3> <div class="custom"> <table width="600px"> <td width="100px" class="sub"><strong>ID</strong></td> <td width="250px" class="sub"><strong>NOME</strong></td> <td width="250px" class="sub"><strong>LOGIN</strong></td> </table> <?php require ('conf.php'); $user= new User(); $user->lista_user(); $sql = mysql_query("SELECT id_usuario,nome, login, senha FROM usuarios"); $numRegistros = mysql_num_rows($sql); if($numRegistros !=0){ while ($users = mysql_fetch_array($sql)){ ?> <table width="600px" class="nrm"> <tr> <td class="nrm" width="100px"><strong><a href="lista_usuario.php?id_usuario=<?php echo md5($users[id_usuario]) ?>" title="DELETAR" class="mod">X</a> <?php echo $users[id_usuario]; ?></strong></td> //aqui é onde eu deleto o id do usuário,e que posso colocar <?php echo md5($users[id_usuario]) ?> <td class="nrm" width="250px"><strong><?php echo $users[nome]; ?></strong></td> <td class="nrm" width="250px"><strong><?php echo $users[login]; ?></strong></td> </tr> </table> <?php } }else{ echo "<p class=ttp><strong>NENHUM REGISTRO ENCONTRADO!!!</strong></p>"; } ?> </div> <p class="sub" style="background-image: url(media/bottom.png);"><a href="index_db.php" class="mod"><img src="media/icons/home.gif"> HOME</a> | <a href="cadastra_usuario.php" class="mod"><img src="media/icons/add.gif"> CADASTRAR</a> | <a href="lista_usuario.php" class="mod"><img src="media/icons/user.gif"> CADASTRADOS/DELETAR</a> | <a href="busca_usuario.php" class="mod"><img src="media/icons/search.gif"> BUSCAR</a></p> </div> </body> </html>AQUI É A MINHA CLASSE ONDE ESTÃO AS FUNÇÕES PARA DELETAR E OUTRAS:<?php require ('db.php'); class User{ //Definindo a classe User var $id_usuario; var $nome; var $login; var $senha; var $esta_salvo; function __construct($id_usuario){ //Função com base na chave primária do id_usuario $sql = "SELECT nome, login, senha FROM usuarios WHERE id_usuario = '$id_usuario';"; $query = mysql_query($sql); if($query->mysql_num_rows>0){ $info = $query->mysql_fetch_object($sql); $this->nome = $info->nome; $this->login = $info->login; $this->senha = $info->senha; $this->id_usuario = $id_usuario; } } function lista_user(){ $users = $_REQUEST['id_usuario']; if($users !=""){ //$users = md5($this->id_usuario); $sql = mysql_query("DELETE FROM usuarios WHERE id_usuario = '$users'"); if($sql){ echo "<div id=content><script type=text/javascript>showDialog('SUCESSO!','<h3>SUA REQUISIÇÃO FOI BEM EXECUTADA.</h3>','success')</script></div>"; echo "<p class=ttp><strong>DADOS DELETADOS CORRETAMENTE!!!</strong></p>"; }else{ echo "<p class=ttp>ERRO AO DELETAR CADASTRO!!!</p>"; } } } } ?>Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.