Jump to content
Marcones Borges

Cadastro com Senha Criptografada

Recommended Posts

Boa noite, gostaria de ajuda.

 

tenho este código a baixo funcionando, gostaria de incrementar o md5 em meu sistema, como faço?

e  minha pagina de login mudaria alguma coisa?

 



if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO usuario (id, usuario, nome, email, telefone, senha, data_cadastro) VALUES (%s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['nome'], "int"),
                       GetSQLValueString($_POST['usuario'], "text"),
                       GetSQLValueString($_POST['nome'], "text"),
                       GetSQLValueString($_POST['email'], "text"),
                       GetSQLValueString($_POST['telefone'], "text"),
                       GetSQLValueString($_POST['senha'], "text"),
                       GetSQLValueString($_POST['data_cadastro'], "text"));

  mysql_select_db($database_localhost, $localhost);
  $Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());

  $insertGoTo = "index.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

 

 

Share this post


Link to post
Share on other sites

Basicamente você coloca:

GetSQLValueString(md5($_POST['senha']), "text"),

E no seu login você precisa comparar com md5($_POST['senha']) também.

 

Mas devo ressaltar que seu código é bem inseguro fazendo deste jeito. Você está sujeito a SQL Injection por não filtrar os dados que vem do $_POST e $_SERVER com filter_input() e não estar utilizando PDO Prepare Statements. Além disso md5() já não é quase mais usado, melhor trocar para password_hash().

  • +1 1

Share this post


Link to post
Share on other sites

Beleza amigo deu certo o MD5, então como eu faria com password_hash ?

 



if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO usuario (id, usuario, nome, email, telefone, senha, data_cadastro) VALUES (%s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['nome'], "int"),
                       GetSQLValueString($_POST['usuario'], "text"),
                       GetSQLValueString($_POST['nome'], "text"),
                       GetSQLValueString($_POST['email'], "text"),
                       GetSQLValueString($_POST['telefone'], "text"),
                       GetSQLValueString($_POST['senha'], "text"),
                       GetSQLValueString($_POST['data_cadastro'], "text"));

  mysql_select_db($database_localhost, $localhost);
  $Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());

  $insertGoTo = "index.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

 

O login esta assim.

 



$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['usuario'])) {
  $loginUsername=$_POST['usuario'];
  $password=$_POST['senha'];
  $MM_fldUserAuthorization = "nivel";
  $MM_redirectLoginSuccess = "index.php";
  $MM_redirectLoginFailed = "login.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_localhost, $localhost);
      
  $LoginRS__query=sprintf("SELECT usuario, senha, nivel FROM usuario WHERE usuario=%s AND senha=%s",
  GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 
   
  $LoginRS = mysql_query($LoginRS__query, $localhost) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
    
    $loginStrGroup  = mysql_result($LoginRS,0,'nivel');
    
    if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;          

    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];    
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else {
    header("Location: ". $MM_redirectLoginFailed );
  }
}

 

e como eu faria o filtro contra invasaão mysql injection

Share this post


Link to post
Share on other sites
23 minutos atrás, Kosonome disse:

Basicamente você coloca:


GetSQLValueString(md5($_POST['senha']), "text"),

E no seu login você precisa comparar com md5($_POST['senha']) também.

 

Mas devo ressaltar que seu código é bem inseguro fazendo deste jeito. Você está sujeito a SQL Injection por não filtrar os dados que vem do $_POST e $_SERVER com filter_input() e não estar utilizando PDO Prepare Statements. Além disso md5() já não é quase mais usado, melhor trocar para password_hash().

consegui com MD5, coloquei aqui senha e login funcionando perfeito...

 

agora me diz como faço o filtro contra inject neste código grato!

 

Share this post


Link to post
Share on other sites

Primeiramente o filtro:

Citar

$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);

 

Depois é pegar o post e enviar para uma classe/função para verificar ou codificar certos caracteres

Citar

funcao_nome($post-senha);

 

Depois de passado pela função/método que vai prevenir SQL inject na instância da execução:

Citar

$mdPass = md5($post-senha);

 

Então usar PrepareStatements da PDO como já foi citado, para registrar os dados, lembrando que lugar do $post->senha você usará a variável criada $mdPass.

 

Bom isso é o básico do básico de um sistema eficaz e seguro. Que esse básico já garante 99% de segurança.

Lembrando que para usar senha "criptografada" baste que use o comandos:

Citar

<?php

$string = "Seria o post que digitado";

$cript = md5($string);

 

Também pode usar isso:

Citar

<?php

$string = "Seria o post que digitado";

$cript = sha1($string);

 

  • +1 1
  • -1 1

Share this post


Link to post
Share on other sites

Criei um exemplo de verificação aqui:

 

Spoiler

<?php

class Checagem {
    private static $Valor;
    private static $Caractere;
    public static $retorno = null;

    public static function validarCampo($verifica) {
        self::$Valor = (string) $verifica;
        if (!preg_match('/^[a-zA-ZÀ-Úà-ú ]+$/', self::$Valor)) {
            self::$retorno = "Opa! Só pode usar letras e espaços";
            return true;
        } else {
            self::$retorno = null;
            return false;
        }
    }
}

$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);
$post->senha = "1a";

if (Checagem::validarCampo($post->senha)) {
    echo Checagem::$retorno;
} else {
    echo "Ok passou pela verificação!";
}

 

 

  • +1 1

Share this post


Link to post
Share on other sites
4 minutos atrás, OmarF disse:

Criei um exemplo de verificação aqui:

 

  Ocultar conteúdo


<?php

class Checagem {
    private static $Valor;
    private static $Caractere;
    public static $retorno = null;

    public static function validarCampo($verifica) {
        self::$Valor = (string) $verifica;
        if (!preg_match('/^[a-zA-ZÀ-Úà-ú ]+$/', self::$Valor)) {
            self::$retorno = "Opa! Só pode usar letras e espaços";
            return true;
        } else {
            self::$retorno = null;
            return false;
        }
    }
}

$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);
$post->senha = "1a";

if (Checagem::validarCampo($post->senha)) {
    echo Checagem::$retorno;
} else {
    echo "Ok passou pela verificação!";
}

 

 

esta verificação posso colocar antes do meu código correto?

 

Share this post


Link to post
Share on other sites
39 minutos atrás, Marcones Borges disse:

esta verificação posso colocar antes do meu código correto?

 

 

Olha é só um exemplo simples, sobre POO, onde envio algo para um método de uma classe se responsabilizar pela validação dos dados.

Então vamos explicar....

Primeiro eu crio o arquivo que será a classe de verificação: Checagem.class.php

Spoiler

<?php
class Checagem {
    private static $Valor;
    private static $Caractere;
    public static $retorno = null;

    public static function validarCampo($verifica, $quantidade) {
        self::$Valor = (string) $verifica;
        self::$Caractere = (int) $quantidade;
        if (empty(self::$Valor) || (strlen(self::$Valor) <= self::$Caractere)) {
            self::$retorno = "Opa! você tem que digitar mais de " . self::$Caractere . " caracteres!";
            return true;
        } else if (!preg_match('/^[a-zA-ZÀ-Úà-ú ]+$/', self::$Valor)) {
            self::$retorno = "Opa! Só pode usar letras e espaços";
            return true;
        } else {
            self::$retorno = null;
            return false;
        }
    }
}

 

O seja nesse arquivo eu posso ter quantos métodos eu quiser, para validar qualquer coisa que seja necessário validar logins senhas etc... E dentro de cada método eu posso colocar as condições de validação. Note que nesse exemplo agora eu coloquei um verificação de quantidade de caractere necessário.

 

Então no arquivo que vai receber o post eu aplico o filtro, incluo o arquivo da classe e instancio ela, para poder acessar seus métodos:

Spoiler

<?php
$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);

require_once ('./Checagem.class.php');
$obj = new Checagem();

 

 

Já isso aqui é só um exemplo porque o filtro já aplicado vai pegar tudo que veio da array GLOBAL.POST: 

Não sendo necessário definir o que vai se o que:

Citar

$post->senha = "1a";

Ou seja... Digamos que eu tenha criado um formulário e cliquei em submeter se eu tivesse no arquivo que vai receber o post um var_dump($post); veria todos os dados da GLOBAL envelopados pelo filtro.

 

Então agora seria a validação:

Spoiler

if (!$post) {
    echo "O arquivo não recebeu nenhum post";
} else {
    // Esse é a condição da classe se ela retornar existe essa condição
    // Parando o script nessa condição
    if (Checagem::validarCampo($post->senha, 10)) {
        echo Checagem::$retorno;
    }
    else {
        echo "Ok passou pela verificação!";
        // Então como o motivo do post aqui eu aplico a criptação da senha
        $cript = md5($post->senha);
        /*
         * Aqui com os dados já limpos e verificados.
         * Solicitaria a uma outra casse PDO para verificar os dados no banco
         * e se não existir ai sim eu cadastraria o usuário.
         */
    }
}

 

 

Ficando mais ou menos assim o arquivo que receberia o post, mas isso aqui é só um exemplo básico

 

Spoiler

<?php
$post = (object) filter_input_array((htmlspecialchars(INPUT_POST)), FILTER_DEFAULT);

require_once ('./Checagem.class.php');
$obj = new Checagem();

if (!$post) {
    echo "O arquivo não recebeu nenhum post";
} else {
    if (Checagem::validarCampo($post->senha, 10)) {
        echo Checagem::$retorno;
    }
    else {
        echo "Ok passou pela verificação!";
        // Então como o motivo do post aqui eu aplico a criptação da senha
        $cript = md5($post->senha);
        /* ************************************ */
    }
}

 

 

 

 

Share this post


Link to post
Share on other sites

Tanto md5 quanto sha1 não são tão seguros assim. Façam com password_hash e "PASSWORD_BCRYPT" pois segue uma implementação do Blowfish. O password gerado fica com até 72 caracteres ou mais, cuidado.

$passwordHash = password_hash('senha', PASSWORD_BCRYPT);

if (password_verify('senha-errada', $passwordHash)) { 
	// senha correta
} else {
	// senha errada
}

 

15 horas atrás, OmarF disse:

Primeiramente o filtro:

 

O filtro filter_input_array() não é para utilizar com uma linha só provavelmente, o exemplo da documentação do PHP é bem legal: https://secure.php.net/manual/pt_BR/function.filter-input-array.php

 

Um exemplo de filtragem e PDO seria assim:

// string de conexão ao banco de dados
$pdo = new PDO('sqlite:/path/db/users.db');

// SQL
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');

// evitar html/javascript injection filtrando o $_GET['id']
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);

// evita SQL injection em conjunto com filter_input
$stmt->bindParam(':id', $id, PDO::PARAM_INT);

// executa o SQL no banco de dados
$stmt->execute();

 

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Almeidareii
      Bom, tenho 3 enigmas para descobrir porém não estou conseguindo, se puderem me dar uma  ajuda, com alguma dica ou com a propria rsp kk
      Encontrar algum padrao, alguma coisa ja ajuda, obrigado a todos.
      obs eles podem estar interligados
       
      1)
      139 28 49 19 189 11 5 18
      156 66 49 19 95 10 
      214 9 
      19 5 88 15 45 29
      101 11 156 66
      129 10 19 5 88 15
      101 11 19 5 45 29
      129 10
      214 9
      45 29 139 26
      156 66 19 5 95 10
      43 63 136 21 5 18
      214 9
      156 66 5 18
      189 11 88 15 156 66 49 19
      95 10 19 5 139 28
      101 11 5 18 129 10
      139 28 49 19 189 11 5 18
      101 11 19 5 45 29
      19 5 88 15 45 29
      189 11 88 15 156 66 49 19
      156 66 19 5 95 10
      95 10 19 5 139 28
      101 11 156 66
      88 15 139 26 38 26
      95 10 139 26 189 11
      139 28 5 18 156 66 5 18
      156 66 19 5 95 10
      19 5 88 15 45 29
      101 11 156 66
      214 9
      43 63 136 21 5 18
      139 28 49 19 189 11 5 18
      19 5 88 15 45 29
      129 10 19 5 88 15
      19 5 49 19 129 10
      19 5 88 15 45 29
      101 11 5 18 129 10
      139 28
      101 11 5 18 129 10
      129 10 19 5 88 15
      129 10
      19 5 88 15 45 29
      156 66 189 11 45 29
      101 11 5 18 129 10
      101 11 19 5 45 29
      43 63
      101 11 156 66
      129 10
      101 11 19 5 45 29
      214 9
      156 66 5 18
      139 28 49 19 189 11 5 18
      19 5 88 15 45 29
       
      2) 
      Imf%dmstpv"|jtwp1"Jv(oiw#fppvmn{o!uk'yknxwcu1'Lsc"nwpvv!jmkmdlo0
      E!fgsfggj-"wunhj#ptt(ptprv!fhth&k!lozyk'tzg#d'hnq0!C'wsuoqf$wh}0
       
      3)  Uma imagem com varios números em japones que traduzidos davam nisso (j? é por que tinha um j e eu não sei o seu valor):
      10 5 1 10 9 8 10 6 6 10 7 10 1 10 9 2 10 4 3 10 4 10 9 5 10 5 10 3 10 5 10 7 10 10 9 100 2 10 1 7 10 4 10 7 7 10 9 3 10 3 9 10 2 2 10 6 4 8 10 9 6 8 3 10 10 9 5 10 4 10 2 4 10 5 10 9 6 10 9 6 2 10 1 10 9 10 2 5 4 10 3 10 9 4 10 7 2 10 9 10 1 10 2 10 7 10 8 10 7 2 10 5 10 9 9 10 10 9 4 10 10 10 7 10 4 10 6 2 10 2 10 5 10 9 7 10 10 7 2 10 4 10 7 10 7 10 3 5 10 9 7 10 9 10 6 10 6 j? 10 9 6 10 2 10 7 2 10 8 10 9 9 10 6 10 9 4 10 4 10 7 2 10 4 10 9 6  10 4 j? 10 3 100 10 3 10 2
    • By Full Burn
      Bom dia,
       
      Estou com um problema bem estranho e chato no WP.
       
      Vou logar no painel, coloco o login e a senha corretos, mas depois de enviar, ele volta no login. Não dá nem o alerta de senha errada, pois ela está certa. Apenas volta no login e não abre o painel.
       
      Para entrar, tenho que pedir resgate de senha, fazer o procedimento de trocar a senha e aí consigo entrar. Mas depois de sair, fechar o navegador e tentar entrar de novo, acontece a mesma coisa e tenho que novamente pedir resgate de senha para conseguir entrar.
       
      Alguém já viu isso e sabe me dizer o que é?
       
      Já atualizei a versão do WP e não resolveu.
       
      Agradeço pela ajuda.
    • By Motta
      Após vazamento de supostos diálogos de Moro, Bolsonaro e integrantes do Executivo usarão celulares criptografados da Abin
    • By danart5
      Boa tarde, estou testando um campo para cadastro de usuários, mas quando envio os dados para o banco, o campo senha vai vazio com a codificação MD5. 
      Sem o MD5 a senha é cadastrada normalmente, mas preciso de uma codificação para senha.
       
      <?php $nome = $_POST['nome']; $login = $_POST['login']; $senha = md5($_POST['senha']); $email = $_POST['email']; $setor = $_POST['setor']; $conn = mysql_connect('localhost', 'root', '123456'); if (!$conn) { die('Não foi possível conectar: ' . mysql_error($conn)); } mysql_select_db("osafti", $conn); mysql_set_charset("utf8", $conn); $sqlu = mysql_query("INSERT INTO `login`( `nome_login`, `usuario_login`, `email_login`, `setor_login`, `senha_login`) VALUES ('$nome','$login','$email','$setor','$senha')");
    • By Motta
      Lei aprovada na Austrália ameaça a criptografia em todo o mundo
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.