Como criar um script de inicialização sessão segura em php e mysql

8 partes:

Configurar o servidorConfigurar base de dados MySQLCriar a página de login do banco de dadosCriando funções PHPCriar processamento de páginasCriar arquivos javascriptCriar páginas HTMLproteger páginas

Com mais e mais histórias de pirataria na notícia, os desenvolvedores buscar melhores maneiras de garantir o seu site. Se seu site tem um sistema de afiliação, que poderia estar em risco de ser quebrado e os dados do usuário pode ser comprometida. Este guia irá mostrar uma tentativa de criar um login seguro com PHP. Temos de colocar o nosso melhor esforço na programação do código, mas a segurança e criptografia são todas as questões complexas que mudam o tempo todo e não podemos dizer que dominou o campo todo. Dessa forma, poderíamos ter perdido alguns truques em nossa programação. Se assim for, háznoslos saber e nós vamos tentar incorporar todas as melhorias para o que temos.

Siga este guia vai ajudá-lo a cuidar de muitos tipos de ataques que podem empregam bolachas para tomar o controle de outras contas de usuário, excluir contas e / ou alterar dados. Aqui apresentamos uma lista de possíveis ataques que procura defender este guia:

A abordagem é usar uma combinação de filtros de dados, criptografia e outros métodos para torná-los um pouco mais difícil de atacar aqueles que pensam que a vida.

Tentamos melhorar continuamente este script. o versão mais recente do código Ele está disponível em github. Poderia haver algumas diferenças entre o código que você faça o download nessa página eo código que trata este artigo. Você deve ter em mente que o nosso objectivo não foi à apresentação de páginas HTML feitas pelo aplicativo para ficar bonita em tudo.

Você também deve ter em mente que nós não fechar as tags PHP em arquivos que contêm apenas código PHP. Isto está de acordo com a maioria das recomendações de formatação de código.

Finalmente, você precisa saber que oramos criar todos os arquivos de aplicativos não-HTML em diferentes diretórios dentro do diretório raiz do aplicativo. A maneira mais fácil para criar a estrutura de diretório correto é baixar o código mais recente, clicando em um dos links acima.

Por favor, sinta-se livre para usar este aplicativo como base para a sua própria implementação, mas não usá-lo como um exemplo de boa prática de programação.





Coisas que você precisa

Como estamos usando mysqli_ * que é um conjunto de classes PHP para acessar nosso banco de dados mySQL, você vai precisar dos seguintes versões do PHP e MySQL.

  • 5.3 ou versão posterior PHP
  • MySQL 4.1.3 ou versão posterior

Obviamente, você também precisa de um servidor web configurado para usar o PHP para hospedar suas páginas. Isso é mais provável o servidor web que hospeda a página, a menos que você estiver hospedado o site você mesmo.

Para verificar a versão do PHP e MySQL no seu servidor, utiliza a função phpinfo () -.

parte 1Configurar o servidor

1

Instalar um servidor web, PHP e MySQL no seu servidor.

A maioria dos serviços de hospedagem já instalou PHP e MySQL, mas você terá que verificar que eles têm as últimas versões do PHP e MySQL para este guia pode ser de ajuda. Se você não tem, pelo menos, PHP5.3 e MySQL5, você poderia colocar em causa a sua compromisso com a segurança. Mantenha seu software atualizado é parte do processo de segurança.

Se você tem seu próprio servidor ou computador, você deve instalar o software normalmente necessário para o sistema. Em geral, se você não vai usar a configuração por razões de produção e você vai desenvolver no Windows ou OS X, instale um pacote de aplicativos (pilha) XAMPP é o mais recomendado. Obter a versão adequada para seu sistema operacional:

https://apachefriends.org/en/xampp.html

No entanto, tenha em mente que sob nenhuma circunstância deve usar XAMPP para criar uma produção ambiente de servidor.

No Linux, use o gerenciador de pacotes para baixar e instalar os pacotes necessários. Algumas distribuições, como o Ubuntu, contêm todas as aplicações necessárias em um único pacote. Você só tem que fazer o seguinte em uma janela de terminal Ubuntu:

sudo apt-get install lamp-server ^ phpmyadmin



Mas mesmo se você instalar os elementos necessários, certifique-se de definir uma senha de root do MySQL seguro.

parte 2Configurar banco de dados MySQL

1

Cria um banco de dados MySQL.

Log on to seu banco de dados como um usuário administrador (geralmente "root").

Neste guia, vamos criar um banco de dados chamado "I inicio_seguro".

ver como criar um banco de dados phpMyAdmin.

Você pode usar o código abaixo ou fazer o mesmo em phpMyAdmin ou o seu cliente favorito MySQL GUI, se você quiser:

CRIAR DATABASE `secure_login`-
Nota: Alguns serviços de hospedagem não permitem que você crie um banco de dados com o phpMyAdmin, para aprender fazer isso no cPanel.

2

Criar um usuário apenas com privilégios SELECT, INSERT e UPDATE.

Criar um usuário com privilégios restritos isso significa que, se alguma vez falha de segurança no seu script, o hacker não pode excluir ou deixar nada do nosso banco de dados. Ao utilizar este usuário, você pode fazer quase tudo o que quiser com o seu pedido. Se você é realmente paranóico, você cria um papel diferente para cada usuário.

Claro que você precisa estar logado no MySQL como um usuário com privilégios suficientes para criar um outro usuário. Normalmente este usuário é root.

Os detalhes a seguir são de fácil utilização que criamos:

  • Nome de usuário: "sec_user"
  • password: "eKcGZr59zAa2BEWU"

Observação: é recomendável alterar a senha mencionado anteriormente que quando você vai para executá-lo em seu próprio servidor. Se o fizer, também não se esqueça de alterar o código abaixo e os dados de conexão de banco de dados PHP código no aplicativo que irá criar.

Lembrar não tem que ser uma senha que você possa lembrar, para torná-lo o mais difícil possível. Por exemplo, este é um gerador de senhas aleatórias.

Então você também será o código SQL para criar o usuário do banco de dados e conceder as permissões necessárias. Se preferir, você também pode fazê-lo em uma base de dados de cliente de banco de dados GUI como phpmyadmin:

CRIAR USUÁRIO `Sec_user`@`Localhost` IDENTIFICADOS BY `EKcGZr59zAa2BEWU`-GRANT SELECIONAR, INSERÇÃO, ACTUALIZAÇÃO ON `secure_login`.* TO `Sec_user`@`Localhost`-


Se você ver que você está excluindo registros de qualquer das tabelas deste módulo, você deve adicionar ELIMINAR à lista de privilégios ou então você pode criar um usuário diferente que tem apenas o privilégio DELETE e, apenas na mesa onde você deseja excluir registros, se você não quer fazer as duas coisas. Não é necessário conceder o privilégio algum para eliminar esse exemplo de script.

3

Criar uma tabela MySQL que leva por título "membro".

O código a seguir cria uma tabela com cinco campos (ID, nome de usuário, e-mail, senha, sal). Use a tipo de dados CHAR para campos cujas medida que conhecemos como os campos "Senha" e "sal" sempre têm 128 caracteres. utilização CHAR, nestes casos, excepto o poder de processamento:

CRIAR TABELA `secure_login`.`members` (`id` INT NÃO NULL AUTO_INCREMENT PRIMÁRIA KEY,`username` VARCHAR(30) NÃO NULL,`email` VARCHAR(50) NÃO NULL,`password` CHAR(128) NÃO NULL,`salt` CHAR(128) NÃO NULL) MOTOR = InnoDB-

Como mencionamos anteriormente, você pode fazer qualquer tipo de cliente que você preferir.

4

Criar uma tabela para armazenar tentativas de login.

Vamos usar essa tabela para armazenar o login tenta um usuário. Esta é uma maneira em que dificultaremos ataques de força bruta:



CRIAR TABELA `secure_login`.`login_attempts` (`user_id` INT(11) NÃO NULL,`Tempo ` VARCHAR(30) NÃO NULL) MOTOR=InnoDB

5

Criar uma fila de teste na tabela "membros".

Será importante para ser capaz de testar o script de logon, então, em seguida, iremos apresentar o script para criar um usuário com detalhes conhecidos:


O código que você precisa fazer login como o usuário é:

INSERÇÃO INTO `secure_login`.`members` VALORES(1, `Test_user`, `[email protected]`,`00807432eae173f652f2064bdca1b61b290b52d40e429a7d295d76a71084aa96c0233b82f1feac45529e0726559645acaed6f3ae58a286b9f075916ebf66cacc`,`F9aab579fc1b41ed0c44fe4ecdbfcdb4cb99b9023abb241a6db833288f4eea3c02f76e0d35204a8695077dcf81932aa59006423976224be0390395bae152d4ef`)-

parte 3Criar a página de login para o banco de dados

1

Crie uma página de configurações globais.

Crie uma pasta chamada "inclui" no diretório raiz do aplicativo e, em seguida, criar um novo arquivo PHP no diretório. Coloque o nome "psl-config.php". Em um ambiente de produção, você deve localizar o arquivo e todos os outros arquivos "incluir" fora da raiz do documento do servidor web. Se o fizer, que recomendamos, você terá que alterar o "incluir" ou declarações exigidas na medida do necessário para que o aplicativo pode encontrar os arquivos "incluir".

Se você colocar-se esses arquivos fora da raiz do documento do servidor web, você não pode encontrar o seu arquivo com um URL. Então, se alguém deixou a extensão PHP por erro ou estragou as permissões de arquivo, o arquivo não pode ser exibido em texto em uma janela do navegador.

O arquivo terá variáveis ​​de configuração global. Aspectos como alguém pode assinar, se um (HTTPS) conexão segura, entre outros, além dos detalhes do banco de dados poderia ir para aquele lugar.

lt ;? php/ *** Aqui estão os detalhes de início de sessão à base de dados * /definida("HOST", "localhost")-// A propriedade para o qual você deseja se conectardefinida("USUÁRIO", "sec_user")-// O nome de usuário do banco de dadosdefinida("SENHA", "4Fa98xkHVd2XmnfK")-// O banco de dados de senhadefinida("DATABASE", "secure_login")-// O nome do banco de dadosdefinida("CAN_REGISTER", "qualquer")-definida("DEFAULT_ROLE", "membro")-definida("SEGURO", FALSE)-// `Só para desenvolver !!!!

2

Criar a página de login do banco de dados.

Este é o código PHP você tem que usar para se conectar ao banco de dados mySQL. Criar um novo arquivo PHP chamado "db_connect.php" no diretório "inclui" aplicativo e adicionar o código abaixo. Depois, você pode incluir o arquivo em qualquer página em que você deseja se conectar ao banco de dados.

lt ;? phpinclude_once `PSL-config.php`-// Desde functions.php não está incluído.$ mysqli = novo mysqli(HOST, USUÁRIO, SENHA, DATABASE)-

parte 4Criando funções PHP

Estas funções fazer todo o processamento do script de login. Adicionar todas as funções para a página chamada "functions.php" no "inclui" diretório do aplicativo.

  1. 1

    Com segurança iniciar a sessão de PHP.
    sessões PHP tem uma reputação de não ser muito seguro, por isso vai ser importante não só colocar "session_start () ;" no topo de cada página que você deseja usar para sessões PHP. Nós vamos criar uma função chamada "sec_session_start ()", ele vai começar uma sessão PHP com segurança. Você deve chamar esta função no topo de cada página que você deseja acessar uma variável de sessão PHP. Se você está realmente preocupado com a segurança ea privacidade de cookies, dê uma olhada no seguinte artigo: Como criar uma sessão segura do sistema de gestão em PHP e MySQL.

    Este recurso vai fazer seu login script é muito mais seguro. Ele vai parar biscoitos acessar o ID da sessão cookie com javascript (por exemplo, em um ataque XSS). Por sua vez, o "session_regenerate_id () função", que regenera do ID de sessão em cada carregamento da página, irá ajudar a evitar o seqüestro de sessão. Nota: Se você estiver usando HTTPS no seu logon aplicação, defina a variável "$ seguro" para "true". Em um ambiente de produção, é essencial que você emprega HTTPS.

    Criar um novo arquivo chamado "functions.php" no "inclui" diretório de sua aplicação e adicionar o código abaixo.

    lt ;? phpinclude_once `PSL-config.php`-função sec_session_start() {$ session_name = `Sec_session_id`-// Configurar um nome de sessão personalizado.$ garantir = SEGURO-// Este pára que o javascript ser capaz de acessar o ID da sessão.$ httponly = verdadeiro-// sessões Forças só usam cookies.se (ini_set(`Session.use_only_cookies`, 1) === FALSE) {cabeçalho("Localização: não ../error.php?err=Could iniciar uma sessão segura (ini_set)")-saída()-}// Obter as atuais biscoitos params.$ cookieParams = session_get_cookie_params()-session_set_cookie_params($ cookieParams,$ cookieParams,$ cookieParams,$ garantir,$ httponly)-// Definir o nome da sessão de configurar.session_name($ session_name)-session_start()-// Inicia a sessão de PHP.session_regenerate_id()-// Regenerar a sessão, apaga o anterior. }

  2. 2

    Criar a função de login.
    Esta função compara o e-mail e senha com o banco de dados e, se houver uma correspondência, ele aparece como real (verdadeiro). Adicionar esta funcionalidade ao seu arquivo "functions.php"

    função login($ email, $ password, $ mysqli) {// Use preparadas demonstrações isso significa que a injeção de SQL não é possível.se ($ stmt = $ mysqli-gt;preparado("Id, nome de usuário, senha, e-mail saltFROM membersWHERE =? LIMIT 1")) {$ stmt-gt;bind_param(`S`, $ email)- // Une parâmetro "$ email".$ stmt-gt;EXECUTAR()-// Executar a consulta preparada.$ stmt-gt;store_result()-// Obter variáveis ​​de desfecho.$ stmt-gt;bind_result($ user_id, $ username, $ db_password, $ sal)-$ stmt-gt;BUSQUE()-// Faça o hash de senha com um único sal.$ password = de hash(`SHA512`, $ password . $ sal)-se ($ stmt-gt;num_rows == 1) {// Se o usuário existir, verificar se a conta está bloqueada// Por muitas tentativas de conexão.se (checkbrute($ user_id, $ mysqli) == verdadeiro) {// A conta está bloqueada.// Enviar um e-mail para o usuário informando que sua conta está bloqueada.retorno falso-} mais {// Verifique se a senha no jogo de banco de dados // Com a senha que o usuário enviou.se ($ db_password == $ password) {// Senha está correta!// Obter o usuário agente de usuário.$ user_browser = $ _SERVER-// XSS Proteção desde que poderíamos imprimir esse valor.$ user_id = preg_replace("/ + /", "", $ user_id)-$ _SESSION = $ user_id-XSS Protecção // desde que poderíamos imprimir esse valor.$ username = preg_replace("/ + /","",$ username)-$ _SESSION = $ username-$ _SESSION = de hash(`SHA512`,$ password . $ user_browser)-// Login bem sucedidoretorno verdadeiro-} mais {// A senha está incorreta.// Esta tentativa é registrada no banco de dados.$ agora = tempo()-$ mysqli-gt;pergunta("INSERT INTO login_attempts (user_id, tempo) VALUES ( `$ user_id``$ agora`)")-retorno falso-}}} mais {// O usuário não existe.retorno falso-}}}

  3. 3

    A função da força bruta.
    Os ataques de força bruta ocorrer quando um hacker tenta acessar uma conta com 1000 senhas diferentes, seja gerado aleatoriamente ou um dicionário. Em nosso script, se a conta de um usuário não logon após mais de 5 tentativas, sua conta será bloqueada.

    ataques de força bruta são difíceis de evitar, a fazê-lo poderia usar testes CAPTCHA, bloquear as contas de usuário e adicionar um atraso nos logins falhos, de modo que o usuário não pode acessar por mais 30 segundos.

    Nós sugerimos fortemente usando um CAPTCHA. Como não implementaram essa funcionalidade em nosso código de exemplo, nós esperamos fazer em breve com SecureImage, não requer inscrição. Você poderia eu prefiro algo mais conhecido como reCAPTCHA do Google.

    Independentemente do sistema que você decidir usar, sugerimos exibição de imagem CAPTCHA após dois inícios de sessão falhados para evitar perturbar o usuário desnecessariamente.

    Quando confrontado com este problema, a maioria dos desenvolvedores simplesmente bloqueia o endereço IP depois de uma certa quantidade de logins falhos. No entanto, existem muitas ferramentas para automatizar o processo. Eles podem passar por uma série de proxies e até mesmo alterar o IP em cada solicitação. Bloquear todos esses endereços IP podem bloquear as contas de seus usuários legítimos também. No nosso código que irá gravar as tentativas falhadas e bloquear a conta do usuário após cinco tentativas frustradas. Este e-mail será enviado para o usuário com um link para redefini-la, mas não implementaram este ponto em nosso código. Aqui nós apresentamos o "checkbrute ()" função até à data. Agrégaselo seu código "functions.php"

    função checkbrute($ user_id, $ mysqli) {// Obtém o carimbo de hora do horário atual.$ agora = tempo()-// Todas as tentativas de login são contados a partir de 2 horas antes.$ valid_attempts = $ agora - (2 * 60 * 60)-se ($ stmt = $ mysqli-gt;preparado("Login_attemptsWHERE TimeFrom SELECIONAR user_id =? E tempo gt; `$ valid_attempts`")) {$ stmt-gt;bind_param(`I`, $ user_id)-// Executar a consulta preparada.$ stmt-gt;EXECUTAR()-$ stmt-gt;store_result()-// Se houve mais de 5 tentativas falharam login.se ($ stmt-gt;num_rows gt; 5) {retorno verdadeiro-} mais {retorno falso-}}}

  4. 4

    Verifique o estado da sessão iniciada.
    Vamos fazê-lo através da verificação "user_id" e variáveis ​​de sessão "login_string". O "login_string" SESSÃO variável tem navegador usuários da informação, juntamente com a senha anexada por uma função hash. Usamos as informações do navegador, uma vez que é muito improvável que o utilizador mudar para metade da sessão. Você ajudar a evitar o seqüestro de sessão. Adicionar esta funcionalidade ao seu arquivo "functions.php" em "inclui a pasta do aplicativo:

    função login_check($ mysqli) {// Verificar se todas as variáveis ​​de sessão são definidos.se (isset($ _SESSION,$ _SESSION,$ _SESSION)) {$ user_id = $ _SESSION-$ login_string = $ _SESSION-$ username = $ _SESSION-// Obtém o usuário seqüência do agente.$ user_browser = $ _SERVER-se ($ stmt = $ mysqli-gt;preparado("MembersWHERE passwordFROM select = id? LIMIT 1")) {// Une parâmetro "$ id_usuario".$ stmt-gt;bind_param(`I`, $ user_id)-$ stmt-gt;EXECUTAR()-// Executar a consulta preparada.$ stmt-gt;store_result()-se ($ stmt-gt;num_rows == 1) {// Se o usuário existe, obtém as variáveis ​​de desfecho.$ stmt-gt;bind_result($ password)-$ stmt-gt;BUSQUE()-$ login_check = de hash(`SHA512`, $ password . $ user_browser)-se ($ login_check == $ login_string) {// Agora on-line !! retorno verdadeiro-} mais {// Não conectado.retorno falso-}} mais {// Não conectado.retorno falso-}} mais {// Não conectado.retorno falso-}} mais {// Não conectado.retorno falso-}}

  5. 5

    Sanitizes a URL do PHP_SELF
    Esta função sanitizes servidor PHP_SELF variável de saída. É uma modificação de uma função do mesmo nome utilizado pelos sistemas de gestão da WordPress conteúdo:

    função esc_url($ url) {se (`` == $ url) {retorno $ url-}$ url = preg_replace(`|| I`, ``, $ url)-$ tira = ordem(`% 0d`, `% 0a`, `% 0D`, `% 0A ")-$ url = (corda) $ url-$ count = 1-enquanto ($ count) {$ url = str_replace($ tira, ``, $ url, $ count)-}$ url = str_replace(`- //`, `: //`, $ url)-$ url = htmlentities($ url)-$ url = str_replace(`& `, `&`, $ url)-$ url = str_replace("`", `&# 039- `, $ url)-se ($ url !== `/`) {// Estamos apenas links relativos interessados ​​em $ _SERVERretorno ``-} mais {retorno $ url-}}


    O problema com o uso de uma variável de servidor não filtrada é que ele pode ser utilizado numa cruz-local do ataque de scripting. De acordo com a maioria das referências, você só tem que filtrar através de "htmlentities ()", no entanto, continua a ser insuficiente, pelo que existem medidas de segurança excessivas para esta função.

    Outros sugerem deixar em branco o atributo action do formulário ou definido como uma cadeia vazia. Mas isso poderia levar a uma Clique seqüestro ataque iframe.

parte 5Criar processamento de páginas

1

Criar processamento de página de login (process_login.php)

Criar um arquivo para processar logons, com o "process_login.php" nome no "inclui" diretório do aplicativo. Você tem que ir a este diretório porque não tem o formato HTML.

Vamos utilizar a série de funções PHP mysqli_ *, uma vez que esta é uma das últimas extensões mySQL.

lt ;? phpinclude_once `Db_connect.php`-include_once "Functions.php `-sec_session_start()- // Nosso log PHP personalizado seguro.se (isset($ _ POST, $ _ POST)) {$ email = $ _ POST-$ password = $ _ POST- // O hash de senhase (login($ email, $ password, $ mysqli) == verdadeiro) {// Iniciar sessão bem sucedidacabeçalho(`Localização: ../protected_page.php`)-} mais {// Iniciar sessão bem sucedidacabeçalho(`Localização: ../index.php?error=1`)-}} mais {// Variáveis ​​poste direito não enviou a esta página.eco "Pedido inválido `-}

2

Criar um script para terminar a sessão.

O roteiro do logoff deve fazer login, destruí-lo e, em seguida, redirecioná-lo em outro lugar. Nota: Recomendamos a adição de uma proteção CSRF aqui no caso de alguém consegue enviar um link oculto para esta página. Para mais informações sobre CSRF, visita coding Horror.

O código atual para desconectar o usuário, que deve adicionar ao arquivo intitulado "logout.php" no "inclui" diretório da aplicação é o seguinte:

lt ;? phpinclude_once `Inclusões / functions.php`-sec_session_start()-// Desconfigura todos os valores de sessão.$ _SESSION = ordem()-// Obter parâmetros de sessão.$ parâmetros = session_get_cookie_params()-// Exclui o cookie atual.setcookie(session_name(),``, tempo() - 42000,$ parâmetros,$ parâmetros,$ parâmetros,$ parâmetros)-// Destruir sessão. session_destroy()-cabeçalho(`Localização: ../ index.php`)-

3

página de registo.

Você deve incluir o código de registro em dois novos arquivos, chamado de "register.php" no diretório raiz do aplicativo e "register.inc.php" no "inclui", que irá:

  • Obtém e valida o nome de usuário que o usuário quer adotar.
  • Obtém e valida o endereço de e-mail do usuário.
  • Obtém e valida a senha que o usuário deseja usar.
  • Coloca hash de senha e retorna ao "register.php" (ou seja, envia a si mesmo) página.

A maioria validação é feita em javascript, o lado do cliente. Isso ocorre porque o usuário não tem a motivação para contornar essas verificações. Por que o usuário criar uma conta não teria tanta certeza? javascript discutir na próxima seção.

Por enquanto, você só tem que criar o arquivo "register.php" e inclui o código abaixo:

lt ;? phpinclude_once "Inclui / register.inc.php"-include_once "Inclui / functions.php `-?gt;Login Seguro: Formulário de Inscrição

Registe-se connosco

lt ;? phpse (!vazio($ error_msg)) {eco $ error_msg-}?gt;
  • Os nomes de usuário podem conter apenas dígitos, letras maiúsculas, minúsculas e sublinhados.
  • Os e-mails devem ter um formato válido.
  • As senhas devem ter pelo menos 6 caracteres.
  • Senhas deve ser composto por:
  • Pelo menos uma letra maiúscula (A-Z)
  • Pelo menos uma letra minúscula (a-z)
  • Pelo menos um número (0-9)
  • A senha ea confirmação devem corresponder exatamente.
  • Voltar ao página de login.



    O arquivo "register.inc.php" no "inclui" diretório deve ter o código abaixo:

    lt ;? phpinclude_once `Db_connect.php`-include_once `PSL-config.php`-$ error_msg = ""-se (isset($ _ POST, $ _ POST, $ _ POST)) {// Limpar e validar os dados fornecidos.$ username = filter_input(INPUT_POST, `Nome de usuário`, FILTER_SANITIZE_STRING)-$ email = filter_input(INPUT_POST, `E-mail`, FILTER_SANITIZE_EMAIL)-$ email = filter_var($ email, FILTER_VALIDATE_EMAIL)-se (!filter_var($ email, FILTER_VALIDATE_EMAIL)) {// Não é um e-mail válido.$ error_msg .= `

    O endereço de e-mail que você digitou não é válido

    `-}$ password = filter_input(INPUT_POST, `P`, FILTER_SANITIZE_STRING)-se (strlen($ password) != 128) {// O hash de senha deve ser de 128 caracteres.// Caso contrário, haverá algo muito estranho aconteceu. $ error_msg .= `

    configuração de senha inválida.

    `
    -}// A validade do nome de usuário e senha foi verificada no cliente.// Este será o suficiente, porque ninguém vai beneficiar// Violar essas regras.//$ prep_stmt = "SELECT id de onde e-mail = membros? LIMIT 1"-$ stmt = $ mysqli-gt;preparado($ prep_stmt)-// Verifique o e-mail existente. se ($ stmt) {$ stmt-gt;bind_param(`S`, $ email)-$ stmt-gt;EXECUTAR()-$ stmt-gt;store_result()-se ($ stmt-gt;num_rows == 1) {// Agora outro usuário com este e-mail existe.$ error_msg .= `

    Um usuário com este endereço de e-mail já existe.

    `
    -$ stmt-gt;perto()-}$ stmt-gt;perto()-} mais {$ error_msg .= `

    Linha de erro de banco de dados 39

    `
    -$ stmt-gt;perto()-}// Verificar nome de usuário existente. $ prep_stmt = "SELECT id DE ONDE username = Membros? LIMIT 1"-$ stmt = $ mysqli-gt;preparado($ prep_stmt)-se ($ stmt) {$ stmt-gt;bind_param(`S`, $ username)-$ stmt-gt;EXECUTAR()-$ stmt-gt;store_result()-se ($ stmt-gt;num_rows == 1) {// Outro usuário já existe com este nome.$ error_msg .= `

    Um usuário com este nome de usuário já existe

    `
    -$ stmt-gt;perto()-}$ stmt-gt;perto()-} mais {$ error_msg .= `

    linha de erro de banco de dados 55

    `
    -$ stmt-gt;perto()-}// Pendente: // Devemos considerar também a situação em que o usuário não tem// Direitos de registar, para verificar que tipo de tentativas de usuários// Executar a operação.se (vazio($ error_msg)) {// Cria um sal aleatório.// $ Random_salt = de hash ( `sha512`, uniqid (openssl_random_pseudo_bytes (16), TRUE)) - // Não funcionou$ random_salt = de hash(`SHA512`, uniqid(mt_rand(1, mt_getrandmax()), verdadeiro))-// Crie uma senha com sal. $ password = de hash(`SHA512`, $ pas
    Artigos Relacionados