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

(Resolvido) sql injection


tonzinhu

Pergunta

Pessoal, escuto muito o pessoal falando sobre sql injection e tals.

Ai me perguntei, será que meu codigo está seguro?

normalmente uso o mesmo esquema de login, alguém poderia me dizer se está correto, se falta algo, se não está seguro..

pagina valida_user.php

(aqui eu verifico os dados do form e valido.)

<?php

include('php/config.php');

//verificando usuario
$user = $_POST['user'];
$senha = $_POST['pass'];

$verifica[user] = mysql_query("SELECT * FROM usuarios WHERE login='$user'");

if(mysql_num_rows($verifica[user]) == 0){
    print 'usuario invalido';
}
else{
    $l[user] = mysql_fetch_assoc($verifica[user]);
    
    //verificando senha
    if($l[user]['senha'] != $senha){
        print 'senha ou usuario invalido';
    }
    else{
        session_start();
        $_SESSION['usuario'] = $user;
        $_SESSION['senha'] = $senha;
        $_SESSION['idusuario'] = $l[user]['idusuarios'];
        header('location: painel.php');
    }
}





?>
Arquivos de conexão ao banco de dados.
<?php

class querys{
    var $ip = "localhost";
    var $user = "root";
    var $pass = "";
    var $database = "intranet";
    
    function abreConexao(){
        $this-> conn = mysql_connect($this->ip, $this->user, $this->pass);
        mysql_select_db($this->database, $this->conn);
    }
    
}
$querys = new querys;
$querys->abreConexao();

?>

Obs: o usuario ta root só pra teste mesmo, sempre crio usuários e dou as permissões devidas para ele.

Deem dicas ou sugestões por favor.

Vlw

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Não entendo muito de PHP, mas posso "tentar" ajudar...

Você deve tratar a string procurando falhas

Por exemplo, procurar por ' (aspas simples), palavras que podem fazer parte de uma query (ex.: "or", "and", etc.)

O seu código não está "completamente vulnerável", porque você procura por usuários e depois verifica a senha (esse não é o melhor método, porque requer maior processamento)

Mesmo assim, o cara pode burlar sua query e procurar qualquer usuário com determinada senha !

Um exemplo para burlar sua query é o seguinte:

  • Usuário: ' or senha!=''
  • Senha: 123456
A query formada será a seguinte:

SELECT * FROM usuarios WHERE login='' or senha!=''

O exemplo acima irá procurar qualquer usuário onde ou o login é nulo ou a senha é diferente de nulo

Como, na maioria dos sistemas, a senha é um campo obrigatório, é o mesmo que procurar todos os usuários do seu banco de dados

Depois disso, o sistema irá fazer uma "segunda verificação" para ver se a senha é "123456"

Como é possível observar, um hacker poderá facilmente encontrar um usuário digitando apenas sua senha

A melhor forma de impedir isso é procurando por ' e palavras que possam vir a ser reconhecidas por sua query

Link para o comentário
Compartilhar em outros sites

  • 0

É bem simples o proprio PHP já tem funções para tratar a maioria dos casos, você só vai "juntar" as mesmas em uma classe ou função como no exemplo abaixo:

function anti_injection($sql)
{
 // remove palavras que contenham sintaxe sql
 $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
 $sql = trim($sql);//limpa espaços vazio
 $sql = strip_tags($sql);//tira tags html e php
 $sql = addslashes($sql);//Adiciona barras invertidas a uma string
 return $sql;
 }

 //modo de usar pegando dados vindos do formulario
 $nome = anti_injection($_POST["nome"]);
 $senha = anti_injection($_POST["senha"]);

Essa função ai é bem simples, mas você pode implementa-la com maiores replaces e outras funcoes do manual

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,2k
    • Posts
      652k
×
×
  • Criar Novo...