vadnica-logo

PHP Obrazci (Forms)

PHP omogoča ustvarjanje dinamičnih spletnih obrazcev, obdelavo uporabniškega vnosa, validacijo podatkov in odzivanje na uporabniške interakcije. Obrazce najpogosteje uporabljamo za zbiranje podatkov, kot so kontaktni obrazci, prijave ali registracije novih uporabnikov. Spodnji primer prikazuje osnovno strukturo HTML obrazca in PHP skripta za varno obdelavo.

Urejevalnik
REZULTAT

Pri delu z obrazci sta ključni dve stvari: uporabniška izkušnja in varnost. Poskrbeti moramo za ustrezno validacijo na strani strežnika, da preprečimo vnos napačnih ali zlonamernih podatkov. V spodnji tabeli boste našli napredne primere za registracijo in prijavo. Začnimo s preprostim primerom, ki sprejme ime in e-poštni naslov. Uporabili bomo metodo POST, saj je varnejša za pošiljanje podatkov na strežnik, kjer jih bo obdelala datoteka procesiranje.php.

Pojasnilo obdelave

Za profesionalno validacijo uporabljamo funkcijo filter_var, ki varno preveri obliko e-poštnega naslova. Poglejmo si nadgrajen primer datoteke procesiraj.php:


<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Branje in osnovna zaščita podatkov
    $ime = htmlspecialchars($_POST['ime']);
    $email = htmlspecialchars($_POST['email']);

    // Napredna validacija
    if (empty($ime)) {
        echo "Ime je obvezno polje.";
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "Neveljaven format e-poštnega naslova.";
    } else {
        echo "Hvala, " . $ime . "! Vaši podatki so bili uspešno prejeti.";
    }
} else {
    echo "Neposreden dostop do skripte ni dovoljen.";
}
?>
        
Vnosni obrazec V tem primeru nam bo spletna stran ponudila vse vnose za vpis. Po vpisu se podatki izpišejo in se ne shranjujejo nikamor. Glej primer

Zaščita gesel

Zaščita gesel v PHP je pomembna za zagotovitev varnosti uporabniških podatkov. PHP ponuja različna orodja in funkcije za varno shranjevanje in preverjanje gesel. Poglejmo si nekaj ključnih točk:

Zaščita gesla Zaščita gesel je ključnega pomena za varnost uporabniških računov in aplikacij. Glej primer

Gesla morajo biti vedno ustrezno zgoščena (ang. Hashed) pred shranjevanjem v bazo podatkov, ker, če pride do vdora v bazo, uporabniki ne smejo biti dodatno ogroženi zaradi razkritja novih gesel. PHP je uvedel funkcijo password_hash ravno zaradi tega in uporablja najnovejše in varne algoritme za izdelavo "hash-a". Ta funkcija upravlja tudi s salting-om (soljenjem), kar pomeni, da avtomatsko doda naključne vrednosti k našemu geslu za dodatno varnost. Primer uporabe:


// geslo uporabnika
$geslo = "MojeZeloMocnoGeslo123!";

// zgoščevanje (hash) gesla
$gesloHash = password_hash($geslo, PASSWORD_DEFAULT);

// izhod za shranjevanje v bazo podatkov
echo $gesloHash;
        

Funkcija PASSWORD_DEFAULT trenutno uporablja algoritem bcrypt, vendar lahko v prihodnosti preide na bolj varen privzeti algoritem, če bo na voljo. Ko uporabnik vpiše svoje geslo (npr. med prijavo), uporabimo funkcijo password_verify, da primerja vneseno geslo z že shranjenim "hash-om". Primer:


// geslo uporabnika
$geslo = "MojeZeloMocnoGeslo123!";

// zgoščevanje (hash) gesla
$shranjenHash = "$2y$10$wYrFr1vZyxE/DoTGMNOxBritish5764JsqzBYzNOdcdWy1zqHmuUG8";

// preverjanje gesla
if (password_verify($geslo, $shranjenHash)) {
    echo "Geslo je pravilno.";
} else {
    echo "Geslo je nepravilno.";
}
        

Pomembno je vedeti, da password_verify vrne true, če se ujemata, v nasprotnem primeru vrne false. Priporočeno je, da uporabljamo BCRYPT ali močnejše algoritme, kar trenutno uporablja password_hash. Lahko pa se izrecno odločimo za druge algoritme, npr. PASSWORD_ARGON2I ali PASSWORD_ARGON2ID, če potrebujemo višji nivo varnosti.


$hash = password_hash($password, PASSWORD_ARGON2I);
    

Priporočljivo je redno posodabljati hash. Če nadgradimo na bolj kompleksen algoritem, lahko izkoristimo password_needs_rehash, da preverimo, ali je hash zastarel.

if (password_needs_rehash($shranjenHash, PASSWORD_ARGON2I)) {
    $shranjenHash = password_hash($geslo, PASSWORD_ARGON2I);
}
        

Tudi najbolj varen hash ne bo pomagal, če bosta baza podatkov ali aplikacija ranljivi. Poskrbeti je potrebno za zaščito baze (npr. PDO in pripravljenih poizvedb za preprečevanje SQL vbrizgov). Brez potrebe ni potrebno implementirati lastnih mehanizmov za dodaten salting (soljenje), ker funkcija password_hash opravi to sama. Kar pa se tiče vdorov priporočam zelo močno geslo za bazo podatkov, ker samo tako se lahko zaščitimo, če pa do vdora pride, je potrebno vsem uporabnikom sporočiti za ponastavitev gesla. Priporočljivo je tudi implementirati spremljanje sumljivih aktivnosti, kot recimo ponavljajoči poskusi prijave. Funkcija password_hash in spremljajoče funkcije, kot so password_verify in password_needs_rehash, zagotavljajo popolna orodja za varno delo z gesli. Izogibati pa se je potrebno starejšim metodam, kot je md5 ali sha1, ker niso več varne.

Upravitelj gesel Shranjevanje, upravljanje in organiziranje šifriranih gesel, shranjenih v JSON datoteko. Glej primer

Hvala za obisk! Dodajam politiko zasebnosti.

© 2024 Vse pravice pridržane.

Vam je koda pomagala? Če želite podpreti moj trud pri pripravi vodičev in vzdrževanju strani, mi lahko namenite donacijo za kavo.