Skip to content
SilverPC Blog

SilverPC Blog

Tech

A bolygóméretű város: Sci-fi rémálom vagy a távoli jövőnk, ahol az egész Földet egyetlen metropolisz borítja?
  • Tech

A bolygóméretű város: Sci-fi rémálom vagy a távoli jövőnk, ahol az egész Földet egyetlen metropolisz borítja?

2025.09.27.
Brutális gyorsulás: Mennyi utat tesz meg egy autó, ha 2 másodperc alatt éri el a 100 km/órát?
  • Tech

Brutális gyorsulás: Mennyi utat tesz meg egy autó, ha 2 másodperc alatt éri el a 100 km/órát?

2025.09.27.
Az adatok mögötti struktúra: Így működik a főkomponens-elemzés a gyakorlatban
  • Tech

Az adatok mögötti struktúra: Így működik a főkomponens-elemzés a gyakorlatban

2025.09.27.
A szakzsargon útvesztőjében: Mit jelentenek a CFS, GPM, MGD mértékegységek?
  • Tech

A szakzsargon útvesztőjében: Mit jelentenek a CFS, GPM, MGD mértékegységek?

2025.09.27.
A tökéletes páros: Így hozd össze a TP-Link routert a Diginet hálózatával zökkenőmentesen
  • Tech

A tökéletes páros: Így hozd össze a TP-Link routert a Diginet hálózatával zökkenőmentesen

2025.09.27.
Tényleg megáll a tudomány? Az Epson dx 7450 és a nyomtatás színes tinta nélkül
  • Tech

Tényleg megáll a tudomány? Az Epson dx 7450 és a nyomtatás színes tinta nélkül

2025.09.27.

Express Posts List

Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi
  • Roman

Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi

2025.10.02.
Salutare, dragi pasionați de Linux și nu numai! 🖖 Astăzi ne aruncăm într-o călătorie nostalgică, dar și...
Bővebben Read more about Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi
Merită să mai folosești Bitdefender 2013? O analiză a performanței și securității actuale
  • Roman

Merită să mai folosești Bitdefender 2013? O analiză a performanței și securității actuale

2025.10.02.
Cele Mai Bune Recomandări pentru un Monitor Nou de 27″ IPS
  • Roman

Cele Mai Bune Recomandări pentru un Monitor Nou de 27″ IPS

2025.10.02.
Cum instalezi un driver pentru TV Tuner WinFast TV2000 XP Expert în 2024
  • Roman

Cum instalezi un driver pentru TV Tuner WinFast TV2000 XP Expert în 2024

2025.10.02.
Rezolvă acum orice problemă de scriere DVD pe Windows 7: Ghidul complet de depanare
  • Roman

Rezolvă acum orice problemă de scriere DVD pe Windows 7: Ghidul complet de depanare

2025.10.02.
Primary Menu
  • Főoldal
  • Hírek
  • Tech
  • Hardver
  • Szoftver
  • Mobil
  • Gamer
  • Játék
  • Web
  • Tudomány
  • Egyéb
  • Roman

Passwordless Login: Ghid practic de integrare a elementului de securitate FIDO2 într-o pagină PHP

2025.10.02.

Te-ai săturat de parolele uitate, de riscul de a fi spart și de complexitatea gestionării lor? Ei bine, există o soluție elegantă: passwordless login folosind standardul FIDO2. Acest ghid te va purta pas cu pas prin integrarea autentificării fără parolă într-o pagină PHP, folosind elemente de securitate moderne.

Ce este FIDO2 și de ce ar trebui să-ți pese? 🤔

FIDO2 este un set de standarde deschise pentru autentificarea mai puternică și mai ușoară pe web. Acesta include două componente principale: WebAuthn (Web Authentication) pentru browser și CTAP (Client to Authenticator Protocol) pentru comunicarea cu dispozitivele de autentificare, cum ar fi token-uri USB, telefoane sau chiar senzorii biometrici integrați în laptop-uri.

De ce e mai bun decât parolele? Simplu:

  • Securitate sporită: FIDO2 utilizează criptografie cu chei publice/private, ceea ce îl face mult mai rezistent la atacuri de tip phishing sau credential stuffing.
  • Experiență îmbunătățită pentru utilizator: Utilizatorii nu mai trebuie să-și amintească parole complicate sau să le reseteze constant.
  • Conformitate: FIDO2 ajută la respectarea standardelor de securitate moderne și a cerințelor de reglementare.

Pregătirea terenului: Cerințe preliminare 🛠️

Înainte de a începe codarea, asigură-te că ai următoarele:

  • Un server web cu PHP (versiunea 7.2 sau mai recentă este recomandată).
  • Un server HTTPS configurat (FIDO2 necesită o conexiune securizată).
  • Un editor de text sau IDE pentru scrierea codului.
  • Un element de securitate FIDO2 (token USB, telefon cu suport FIDO2 etc.).
  • O bibliotecă PHP pentru gestionarea FIDO2. Voi folosi Webauthn Framework, o bibliotecă populară și bine documentată.

Instalează Webauthn Framework folosind Composer:

composer require web-auth/webauthn-framework

Implementarea pas cu pas 🚶‍♂️

Vom împărți procesul în două părți principale: Înregistrarea unui utilizator și Autentificarea sa ulterioară.

1. Înregistrarea unui utilizator 📝

Înregistrarea presupune asocierea unui element de securitate FIDO2 cu contul unui utilizator. Iată pașii implicați:

  1. Generarea unei provocări (challenge): Serverul generează o valoare aleatorie unică, numită „challenge”, pe care o trimite clientului. Această provocare este utilizată pentru a preveni atacurile de tip replay.
  2. Trimiterea cererii de înregistrare către browser: PHP generează un array JSON cu parametrii necesari pentru crearea unui nou credential WebAuthn și îl trimite către browser.
  3. Crearea credentialului în browser: Browserul afișează o solicitare utilizatorului de a-și folosi elementul de securitate (atingere, scanare biometrică etc.). După autentificare, browserul generează un nou credential și îl trimite înapoi serverului.
  4. Verificarea credentialului pe server: Serverul verifică credentialul primit, asigurându-se că acesta corespunde provocării generate anterior și că provine de la un element de securitate valid.
  5. Salvarea credentialului: Dacă verificarea are succes, serverul salvează credentialul (cheia publică) într-o bază de date, asociat cu contul utilizatorului.
  Internet ultra-rapid: Ghidul tău ca să te conectezi la Rds prin Puppy linux Slako 5.3.3

Iată un exemplu de cod PHP pentru generarea provocării și pregătirea cererii de înregistrare:


<?php

use WebauthnPublicKeyCredentialCreationOptions;
use WebauthnPublicKeyCredentialRpEntity;
use WebauthnPublicKeyCredentialUserEntity;
use WebauthnAuthenticatorSelectionCriteria;
use WebauthnEnumsAuthenticatorAttachment;
use WebauthnEnumsResidentKeyRequirement;
use WebauthnEnumsUserVerificationRequirement;

session_start();

// Informații despre organizația ta
$rpName = 'Exemplu FIDO2';
$rpId = $_SERVER['SERVER_NAME']; // Domeniul site-ului tău

// Informații despre utilizator (ar trebui preluate din baza de date)
$userId = 'user123'; // Un identificator unic pentru utilizator
$userName = 'John Doe';
$userDisplayName = 'John Doe';

// Crearea entităților
$rpEntity = new PublicKeyCredentialRpEntity($rpId, $rpName);
$userEntity = new PublicKeyCredentialUserEntity($userId, $userName, $userDisplayName);

// Generarea opțiunilor de înregistrare
$publicKeyCredentialCreationOptions = PublicKeyCredentialCreationOptions::create(
    $rpEntity,
    $userEntity,
    random_bytes(32), // Provocare aleatorie
    [
        // Algoritmi acceptați
        ['type' => 'public-key', 'alg' => -7], // ES256
        ['type' => 'public-key', 'alg' => -257], // RS256
    ]
)
    ->setAuthenticatorSelection(
        new AuthenticatorSelectionCriteria(
            AuthenticatorAttachment::PLATFORM,
            true,
            ResidentKeyRequirement::RESIDENT_KEY_REQUIRED,
            UserVerificationRequirement::REQUIRED
        )
    )
    ->setTimeout(60000) // Timeout în milisecunde (1 minut)
    ->jsonSerialize();

$_SESSION['registration_options'] = $publicKeyCredentialCreationOptions;

echo json_encode($publicKeyCredentialCreationOptions);

?>

Apoi, vei avea nevoie de cod JavaScript pe frontend pentru a interacționa cu API-ul WebAuthn din browser și a trimite cererea către elementul de securitate al utilizatorului. Acest cod arată cam așa:


async function register() {
  try {
    const response = await fetch('/register.php');
    const options = await response.json();

    const credential = await navigator.credentials.create({
      publicKey: options
    });

    const attestationResponse = {
      id: credential.id,
      rawId: Array.from(new Uint8Array(credential.rawId)),
      type: credential.type,
      response: {
        attestationObject: Array.from(new Uint8Array(credential.response.attestationObject)),
        clientDataJSON: Array.from(new Uint8Array(credential.response.clientDataJSON)),
        authenticatorData: credential.response.authenticatorData ? Array.from(new Uint8Array(credential.response.authenticatorData)) : null,
        signature: credential.response.signature ? Array.from(new Uint8Array(credential.response.signature)) : null,
        userHandle: credential.response.userHandle ? Array.from(new Uint8Array(credential.response.userHandle)) : null
      }
    };

    // Trimite răspunsul la server pentru verificare
    const verificationResponse = await fetch('/verify_registration.php', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(attestationResponse)
    });

    const verificationResult = await verificationResponse.json();

    if (verificationResult.success) {
      alert('Înregistrare reușită!');
    } else {
      alert('Înregistrare eșuată: ' + verificationResult.message);
    }

  } catch (error) {
    console.error('Eroare la înregistrare:', error);
    alert('Eroare la înregistrare: ' + error.message);
  }
}

În final, trebuie să verifici răspunsul pe server (verify_registration.php) și să salvezi credentialul în baza de date. Această etapă implică validarea semnăturii, verificarea că provocarea este corectă și salvarea informațiilor despre elementul de securitate.

2. Autentificarea unui utilizator 🔑

Autentificarea este procesul de a dovedi identitatea unui utilizator folosind elementul său de securitate FIDO2. Pașii sunt similari cu cei de înregistrare:

  1. Generarea unei provocări (challenge): Serverul generează o nouă provocare aleatorie și o trimite clientului.
  2. Trimiterea cererii de autentificare către browser: PHP generează un array JSON cu parametrii necesari pentru autentificare (inclusiv ID-urile credentialelor înregistrate anterior).
  3. Semnarea provocării în browser: Browserul afișează o solicitare utilizatorului de a-și folosi elementul de securitate. După autentificare, browserul semnează provocarea cu cheia privată corespunzătoare credentialului selectat și trimite semnătura înapoi serverului.
  4. Verificarea semnăturii pe server: Serverul preia cheia publică corespunzătoare credentialului utilizat și verifică semnătura primită.
  5. Autentificarea utilizatorului: Dacă verificarea semnăturii are succes, serverul autentifică utilizatorul.

Codul PHP pentru generarea provocării și pregătirea cererii de autentificare este similar cu cel de înregistrare, dar cu opțiuni diferite:


<?php

use WebauthnPublicKeyCredentialRequestOptions;
use WebauthnEnumsUserVerificationRequirement;

session_start();

// ID-urile credentialelor permise pentru acest utilizator (preluate din baza de date)
$allowedCredentials = [
  ['type' => 'public-key', 'id' => base64_decode('...credential id from database...')]
];

// Generarea opțiunilor de autentificare
$publicKeyCredentialRequestOptions = PublicKeyCredentialRequestOptions::create(
    random_bytes(32) // Provocare aleatorie
)
    ->setUserVerification(UserVerificationRequirement::REQUIRED)
    ->setAllowedCredentials($allowedCredentials)
    ->setTimeout(60000) // Timeout în milisecunde (1 minut)
    ->jsonSerialize();

$_SESSION['authentication_options'] = $publicKeyCredentialRequestOptions;

echo json_encode($publicKeyCredentialRequestOptions);

?>

Codul JavaScript pentru autentificare este, de asemenea, similar cu cel de înregistrare, dar folosește funcția navigator.credentials.get():


async function authenticate() {
  try {
    const response = await fetch('/authenticate.php');
    const options = await response.json();

    const credential = await navigator.credentials.get({
      publicKey: options
    });

    const assertionResponse = {
      id: credential.id,
      rawId: Array.from(new Uint8Array(credential.rawId)),
      type: credential.type,
      response: {
        authenticatorData: Array.from(new Uint8Array(credential.response.authenticatorData)),
        clientDataJSON: Array.from(new Uint8Array(credential.response.clientDataJSON)),
        signature: Array.from(new Uint8Array(credential.response.signature)),
        userHandle: credential.response.userHandle ? Array.from(new Uint8Array(credential.response.userHandle)) : null,
      }
    };


    // Trimite răspunsul la server pentru verificare
    const verificationResponse = await fetch('/verify_authentication.php', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(assertionResponse)
    });

    const verificationResult = await verificationResponse.json();

    if (verificationResult.success) {
      alert('Autentificare reușită!');
      // Redirecționează utilizatorul către zona securizată
    } else {
      alert('Autentificare eșuată: ' + verificationResult.message);
    }

  } catch (error) {
    console.error('Eroare la autentificare:', error);
    alert('Eroare la autentificare: ' + error.message);
  }
}

Pe server (verify_authentication.php), vei verifica semnătura folosind cheia publică stocată în baza de date și, dacă este validă, vei autentifica utilizatorul.

  Conexiune sigură: Ghid de configurare a unui VPN IPSec pe Linux Mint 20 Ulyana către un FortiGate

Considerații suplimentare 💡

  • Gestionarea erorilor: Implementează o gestionare robustă a erorilor pe ambele părți (client și server) pentru a oferi o experiență bună utilizatorilor.
  • Securitatea datelor: Protejează datele sensibile (cum ar fi ID-urile credentialelor) din baza de date.
  • Experiența utilizatorului: Asigură-te că procesul de înregistrare și autentificare este intuitiv și ușor de utilizat.
  • Politici de securitate: Definește politici clare privind cerințele pentru elementele de securitate FIDO2 (de exemplu, obligativitatea utilizării senzorilor biometrici).
  • Backup: Implementează mecanisme de backup pentru a permite utilizatorilor să-și recupereze accesul în cazul pierderii sau defectării elementului de securitate (de exemplu, coduri de recuperare sau alte metode de autentificare secundare).

FIDO2 nu este doar o tehnologie, este o schimbare de paradigmă în modul în care abordăm securitatea online. Prin eliminarea parolelor, reducem semnificativ suprafața de atac și oferim o experiență mai bună utilizatorilor. Cu toate acestea, este important să ne amintim că nicio soluție nu este perfectă. Implementarea corectă și continuă monitorizare sunt esențiale pentru a ne asigura că FIDO2 ne oferă cu adevărat beneficiile promise.

Concluzie 🎉

Implementarea autentificării fără parolă cu FIDO2 poate părea complexă la început, dar beneficiile pentru securitate și experiența utilizatorului sunt incontestabile. Urmând acest ghid și adaptând codul la nevoile tale, poți adăuga un nivel superior de securitate aplicațiilor tale PHP și poți oferi utilizatorilor o modalitate mai simplă și mai sigură de a se autentifica. Nu uita: testarea riguroasă și monitorizarea constantă sunt cheia succesului.

autentificare FIDO2 Passwordless login PHP Securitate securitate web WebAuthn
Partajează pe Facebook Partajează pe X Partajează pe Messenger Partajează pe WhatsApp Partajează pe Viber

Lasă un răspuns Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Recomandate

De ce o recomandare pentru Linux Ubuntu este alegerea perfectă pentru începători (și nu numai)
  • Roman

De ce o recomandare pentru Linux Ubuntu este alegerea perfectă pentru începători (și nu numai)

2025.10.02.
Creează un formular de contact PHP securizat și funcțional în mai puțin de 30 de minute
  • Roman

Creează un formular de contact PHP securizat și funcțional în mai puțin de 30 de minute

2025.10.02.
Cauți o soluție de securitate perfectă? Ghidul complet pentru a alege protecția ideală
  • Roman

Cauți o soluție de securitate perfectă? Ghidul complet pentru a alege protecția ideală

2025.10.02.
Blocat în cod? Descoperă resursele de care ai nevoie când ceri „puțin ajutor PHP”
  • Roman

Blocat în cod? Descoperă resursele de care ai nevoie când ceri „puțin ajutor PHP”

2025.10.02.
Stăpânește PHP Number Format: Cum să formatezi numere pentru o afișare perfectă
  • Roman

Stăpânește PHP Number Format: Cum să formatezi numere pentru o afișare perfectă

2025.10.02.
Ghidul definitiv pentru creare meniu PHP dinamic și interactiv
  • Roman

Ghidul definitiv pentru creare meniu PHP dinamic și interactiv

2025.10.02.

Olvastad már?

Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi
  • Roman

Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi

2025.10.02.
Salutare, dragi pasionați de Linux și nu numai! 🖖 Astăzi ne aruncăm într-o călătorie nostalgică, dar și...
Bővebben Read more about Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi
Merită să mai folosești Bitdefender 2013? O analiză a performanței și securității actuale
  • Roman

Merită să mai folosești Bitdefender 2013? O analiză a performanței și securității actuale

2025.10.02.
Cele Mai Bune Recomandări pentru un Monitor Nou de 27″ IPS
  • Roman

Cele Mai Bune Recomandări pentru un Monitor Nou de 27″ IPS

2025.10.02.
Cum instalezi un driver pentru TV Tuner WinFast TV2000 XP Expert în 2024
  • Roman

Cum instalezi un driver pentru TV Tuner WinFast TV2000 XP Expert în 2024

2025.10.02.
Rezolvă acum orice problemă de scriere DVD pe Windows 7: Ghidul complet de depanare
  • Roman

Rezolvă acum orice problemă de scriere DVD pe Windows 7: Ghidul complet de depanare

2025.10.02.

Nu rata asta

Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi
  • Roman

Te-ai lovit de o eroare în Ubuntu 12.04 64bit? Iată cele mai comune probleme și cum le rezolvi

2025.10.02.
Merită să mai folosești Bitdefender 2013? O analiză a performanței și securității actuale
  • Roman

Merită să mai folosești Bitdefender 2013? O analiză a performanței și securității actuale

2025.10.02.
Cele Mai Bune Recomandări pentru un Monitor Nou de 27″ IPS
  • Roman

Cele Mai Bune Recomandări pentru un Monitor Nou de 27″ IPS

2025.10.02.
Cum instalezi un driver pentru TV Tuner WinFast TV2000 XP Expert în 2024
  • Roman

Cum instalezi un driver pentru TV Tuner WinFast TV2000 XP Expert în 2024

2025.10.02.
Copyright © 2025 SilverPC Blog | SilverPC kérdések

Az oldalon megjelenő minden cikk, kép és egyéb tartalom a SilverPC.hu tulajdonát képezi, felhasználásuk kizárólag az eredeti forrás pontos és jól látható feltüntetésével engedélyezett.