"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como implementar com segurança um sistema de login de página somente para membros em PHP?

Como implementar com segurança um sistema de login de página somente para membros em PHP?

Publicado em 17/11/2024
Navegar:173

How to Securely Implement a Member-Only Page Login System in PHP?

PHP: páginas seguras somente para membros com um sistema de login

Desafios com o código fornecido

O código PHP fornecido encontra vários problemas que dificultam sua funcionalidade:

  1. Recuperação dos resultados da consulta: Em vez de usar $data1 = $conn->query($sql1);, a abordagem correta é usar $data = mysqli_fetch_array($conn->query($sql1)); ou $data = $conn->query($sql1)->fetch_array(); para buscar os resultados da consulta.
  2. Conexão e Execução do Banco de Dados: A conexão com o banco de dados deve ser estabelecida usando $total = $data = 0; antes de executar qualquer consulta.
  3. Sintaxe MySQLi: A consulta para inserir o token deve usar crases () em torno dos nomes de tabelas e colunas (INSERT INTO tokens (tk, gauth) VALUES (?,? )`) em vez de aspas simples.
  4. Autenticação do usuário: A lógica de autenticação deve retornar o resultado da consulta em vez de contando com valores booleanos ($result = $conn->query($sql3)->fetch_array();).
  5. Token Generation: O método de geração de token existente não é seguro, pois usa openssl_random_pseudo_bytes(). Em vez disso, o código deve usar um gerador de números aleatórios criptograficamente seguro (CSPRNG) como random_bytes().

Solução proposta

  1. Simplifique as operações do banco de dados: Use uma única consulta para recuperar informações do usuário e verificar credenciais.
  2. Use instruções preparadas: Vincule parâmetros para evitar injeção de SQL vulnerabilidades.
  3. Gerar tokens com segurança: Empregue random_bytes() ou uma função semelhante para geração segura de tokens.
  4. Armazenar dados de autenticação na sessão: Salvar o token de autenticação em uma variável de sessão em vez de um cookie.
  5. Validar Tokens: Execute uma consulta ao banco de dados no tabela de tokens para validar o token fornecido.

Código aprimorado

O código revisado a seguir aborda os problemas identificados e fornece um sistema de login de página exclusivo para membros mais seguro:

connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // Prepare statement for user authentication
    $sql_auth = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $sql_auth->bind_param("ss", $_POST['uname'], $_POST['pss']);
    $sql_auth->execute();
    $result_auth = $sql_auth->get_result();

    // Authenticate user
    if ($result_auth->num_rows > 0) {
        $user = $result_auth->fetch_assoc();
        $correct = TRUE;
    } else {
        $correct = FALSE;
    }

    // Generate token
    if ($correct === TRUE) {
        $hex = bin2hex(random_bytes(3));
        $_SESSION['auth'] = $hex;
        $_SESSION['logstat'] = TRUE;
    }

    // Close connection
    $conn->close();
?>
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3