tonzinhu Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 Você não faz nenhum tratamento no que vem do form ($_POST...), isso ai já te deixa com as calças na mão.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tonzinhu Postado Fevereiro 6, 2009 Autor Denunciar Share Postado Fevereiro 6, 2009 e como seria esse tratamento, tem como dar algum exemplo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 Não entendo muito de PHP, mas posso "tentar" ajudar...Você deve tratar a string procurando falhasPor 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: 123456A 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 nuloComo, na maioria dos sistemas, a senha é um campo obrigatório, é o mesmo que procurar todos os usuários do seu banco de dadosDepois 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 senhaA melhor forma de impedir isso é procurando por ' e palavras que possam vir a ser reconhecidas por sua query Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Norivan Oliveira Postado Fevereiro 6, 2009 Denunciar Share Postado Fevereiro 6, 2009 É 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tonzinhu Postado Fevereiro 7, 2009 Autor Denunciar Share Postado Fevereiro 7, 2009 Vlw mesmo galera, entendi o funciomanto da coisa hehe.vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
tonzinhu
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.)
Arquivos de conexão ao banco de dados.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
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.