brhvitor6 14 Denunciar post Postado Outubro 24, 2012 Fala galera, beleza? Preciso da opnião de vocês sobre a segurança do meu codigo e estrutura.... obg <?php include('pdo.php'); include('String.php'); include('ssl.php'); $SSL = new ssl; $MySql = new PdoAnalitc; $String = new StringProt; //verifica campos if(isset($_POST['login'])) { $login = $String->StringSemAcentos($_POST['login']); }else die('preencha o campo login'); if(isset($_POST['senha'])) { $senha = $String->StringSemAcentos($_POST['senha']); }else die('preencha o campo senha'); //conecta ao banco echo $MySql->Connect("vitor","vitor","localhost","intranet"); //criptografia da senha (??) mas primeiro é neccessario testar se existe alguma coisa no banco por causa do IV $query = $MySql->NumRows("SELECT * FROM usuarios WHERE login = '$login'"); if($query == 1) //se for exatamente 1 (e não mais) { $array = $MySql->FeatchArray("SELECT * FROM usuarios WHERE login = '$login'"); $iv = base64_decode($array['PassHs']); }else die('Login ou senha incorretos'); //Criptografa com o IV recebido do banco $senha = base64_encode($SSL->Encrypt($senha,'123',$iv)); //Compara senha no banco de dados $query = $MySql->NumRows("SELECT * FROM usuarios WHERE login = '$login' AND senha = '$senha'"); if($query == 1) { $array = $MySql->FeatchArray("SELECT * FROM usuarios WHERE login = '$login' AND senha = '$senha'"); $_SESSION['login'] = base64_encode($SSL->Encrypt($login,'123',$iv)); $_SESSION['controle'] = $iv; die("Ok... não é o pior codigo que eu ja vi na internet"); }else die("Login ou senha incorreto"); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Peperaio 20 Denunciar post Postado Outubro 24, 2012 Não está seguro, pois você está usando dados vindo por $_POST direto em querys, sem filtrá-lo antes. Use essa função para filtrar os dados vindo por post ou get: function protect( $str ){ /** * Função para retornar uma string protegida contra SQL/Blind/XSS Injection * @param Mixed str * @access public * @return string */ if( !is_array( $str ) ) { $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str); $str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str); $str = str_replace("<script","",$str); $str = str_replace("script>","",$str); $str = str_replace("<Script","",$str); $str = str_replace("Script>","",$str); $str = trim($str); $tbl = get_html_translation_table(HTML_ENTITIES); $tbl = array_flip($tbl); $str = addslashes($str); $str = strip_tags($str); return strtr($str, $tbl); } else return $str; } Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Rangel 208 Denunciar post Postado Outubro 24, 2012 só para completar o amigo. Não está seguro, pois você está usando dados vindo por $_POST direto em querys, sem filtrá-lo antes. eu sei que com GET nós conseguimos com certa facilidade fazer consultas e etc.. creio que no POST apesar de mais seguro da pra se fazer a mesma coisa caso você não filtre podemos mandar valor como 1=1 fazendo com o que o código retorne true e quando retorna true normalmente você consegue logar, dai é meio passo para ferrar o restante do site. um dica valiosa é que a segurança nem sempre ta no code e sim no server. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Jacinto 74 Denunciar post Postado Outubro 24, 2012 Provavelmente você está usando PDO, então filtre-as com bindParam ou bindValue: EXEMPLOS: $sql = $pdo->prepare("SELECT * FROM `tabela` WHERE `id` = :id"); $sql->bindValue(':id', $_GET['id'], PDO::PARAM_INT); $sql->execute(); $sql = $pdo->prepare("SELECT * FROM `tabela` WHERE `id` = ? AND `title` = ?"); $sql->bindParam(1, $_GET['id'], PDO::PARAM_INT); $sql->bindParam(2, $_GET['title'], PDO::PARAM_STR); $sql->execute(); Compartilhar este post Link para o post Compartilhar em outros sites
brhvitor6 14 Denunciar post Postado Outubro 24, 2012 aqui esta tratando a var: $login = $String->StringSemAcentos($_POST['login']); edit: So passa letra maiuscola e minuscola / numeros.... é um preg_replace edi2: todas as includes foram feitas por mim Compartilhar este post Link para o post Compartilhar em outros sites