Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Segurança em método GET


Carlohcs

Pergunta

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:
lista_usuario.php?id_usuario=eccbc87e4b5ce2fe28308fd9f2a7baf3
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">
        &lt;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>&lt;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

  • 0

Como somente quem poderá excluir usuários serão pessoas autorizadas (imagino eu), salvando os dados em sessões, não haveriam problemas. Quem quiser excluir passando diretamente o valor, tudo bem, desde que tenha permissão para tal.

Mas se ainda assim quiser utilizar MD5 (se a pessoa souber o ID do usuário não adianta em nada, pois poderá gerar esse código) pode converter o resultado da criptografia de hexadecimal para decimal, e assim salvar no BD.

Link para o comentário
Compartilhar em outros sites

  • 0

(Reabrindo Tópico para melhoras)

Só para concluir, preferi usar a função do PHP "base64_encode" na exibição dos dados após o clique,e ao enviar a query para deletar no banco de dados,fiz o reverso, "base64_decode".Exemplo:

Página onde exibo na URL a exlusão do usuario pelo id:

<a href="lista_usuario.php?id_usuario=<?php echo base64_encode($users[id_usuario]); ?>
E após o envio, na minha classe de exclusão,fãço a exclusão com o reverso da codificação:
class Listar{

    var $id_usuario;

function lista_user(){
    
    $users = base64_decode($_REQUEST['id_usuario']);
    
                if($users !=""){
                
                    $sql = mysql_query("DELETE FROM usuarios WHERE id_usuario = '$users'");
PRONTO!Ao excluir,na URL aparece algo do genero:
http://localhost/sistema/lista_usuario.php?id_usuario=Mw==

Na classe,ele faz a descriptografia e deleta normalmente com o numero do id do usuario.

Não é muito bem visto,mas foi o método que mais se adaptou.Até mais.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...