Sigurnosna funkcija PHP-a: strip_tags, filter_var, Md5 i sha1

⚡ Pametni sažetak

PHP sigurnost štiti web aplikacije od napadača i nepažljivog unosa validacijom, sanitizacijom i sigurnim pohranjivanjem podataka. Ovaj vodič pokriva glavne prijetnje, a zatim prikazuje strip_tags, filter_var, escapingi moderno hashiranje lozinki s password_hash za obranu od XSS-a, SQL injekcije i ukradenih vjerodajnica.

  • 🛡️ Upoznajte prijetnje: Glavni rizici su SQL injekcija, cross-site scripting i injekcija koda, obično putem obrazaca ili URL parametri.
  • 🧹 Oznake stripova: strip_tags uklanja HTML, JavaSkripte i PHP oznake iz ulaza, smanjujući rizik od pohranjenog cross-site scriptinga.
  • Potvrdi unos: filter_var provjerava i sanitizira podatke, potvrđujući da je vrijednost očekivanog tipa prije nego što joj vaš kod vjeruje.
  • 🔒 Izbjegavanje ili vezanje: mysqli_real_escape_string izbjegava unos upita, ali parametrizirani pripremljeni izrazi su jača obrana od SQL injekcije.
  • 🔑 Hash lozinke desno: Nikada ne pohranjujte lozinke s MD5 ili SHA1; koristite password_hash i password_verify, koji primjenjuju sporo, slano bcrypt hashiranje.
  • 💡 Dubinska obrana: Kombiniraj validaciju, escaping, HTTPS i račune baza podataka s najmanjim privilegijama, umjesto oslanjanja na jednu kontrolu.
  • 🤖 AI pomoć: AI alati mogu provjeriti PHP kod za sigurnosne propuste i pomoći u sigurnom ispravljanju SQL injekcije ili XSS slabosti.

Sigurnost PHP-a

Potencijalne sigurnosne prijetnje

Postoje u osnovi dvije skupine ljudi koje mogu napasti vaš sustav:

  • Hakeri – s namjerom da dobiju pristup neovlaštenim podacima ili ometaju aplikaciju
  • Korisnici – mogu nenamjerno unijeti pogrešne parametre u obrasce, što može imati negativne učinke na web stranicu ili web aplikaciju.

Sljedeće su vrste napada na koje moramo paziti.

SQL Injection – ova vrsta napada dodaje štetni kod SQL izjave.

To se radi pomoću obrazaca za korisnički unos ili URLkoji koriste varijable.

Dodani kod komentira uvjet u WHERE klauzuli SQL naredbe. Dodani kod također može:

  • ubacite uvjet koji će uvijek biti istinit
  • izbrisati podatke iz tablice
  • ažurirati podatke u tablici

Ova vrsta napada obično se koristi za dobivanje neovlaštenog pristupa aplikaciji.

Skriptiranje između stranica (XSS) – ova vrsta napada ubacuje štetni kod, obično JavaSkripta. To se radi pomoću obrazaca za unos korisnika kao što su kontaktni obrasci i obrasci za komentare. To se radi kako bi se:

  • Dohvaćanje osjetljivih informacija kao što su podaci o kolačićima
  • Preusmjeri korisnika na drugu URL.

Druge prijetnje mogu uključivati ​​ubrizgavanje PHP koda, ubrizgavanje shell-a, ubrizgavanje e-pošte i otkrivanje izvornog koda skripte.

Najbolji primjeri iz prakse za sigurnost PHP aplikacija

Pogledajmo sada neke od najboljih sigurnosnih praksi u PHP-u koje moramo uzeti u obzir prilikom razvojaping naše aplikacije.

PHP strip_tags

Funkcija strip_tags uklanja HTML, JavaScript, ili PHP oznake iz niza znakova.

Ova funkcija je korisna kada moramo zaštititi našu aplikaciju od napada poput cross-site scriptinga.

Razmotrimo aplikaciju koja prihvaća komentare od korisnika.

<?php
 
$user_input = "Your site rocks";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Pod pretpostavkom da ste spremili datoteku comments.php u mapu phptuts, idite do URL http://localhost/phptuts/comments.php

PHP strip_tags

Pretpostavimo da kao korisnički unos primate sljedeće: alert(‘Your site sucks!’);

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Pregledajte URL http://localhost/phptuts/comments.php

PHP strip_tags

Sada zaštitimo našu aplikaciju od takvih napada pomoću funkcije strip_tags.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Pregledajte URL http://localhost/phptuts/comments.php

PHP strip_tags

Funkcija PHP filter_var

Funkcija filter_var koristi se za provjeru valjanosti i čišćenje podataka.

Validacijom se provjerava jesu li podaci ispravne vrste. Numerička provjera valjanosti niza vraća pogrešan rezultat.

Dezinfekcija je uklanjanje ilegalnih znakova iz a niz.

Za potpunu referencu provjerite ovu poveznicu: filter_var

Donji kod je za sustav komentiranja. Koristi funkciju filter_var i konstantu FILTER_SANITIZE_STRIPPED za uklanjanje oznaka.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
 
?>

Izlaz:

alert('Your site sucks!');

Bilješka: FILTER_SANITIZE_STRIPPED (pseudonim za FILTER_SANITIZE_STRING) je zastario od verzije PHP 8.1. Za novi kod koristite strip_tags() ili, za siguran prikaz, htmlspecialchars().

PHP mysqli_real_escape_string

Funkcija mysqli_real_escape_string koristi se za zaštitu aplikacije od SQL injekcije.

Pretpostavimo da imamo sljedeću SQL naredbu za provjeru korisničkog imena i lozinke.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Zlonamjerni korisnik može ući ' ILI 1 = 1 — u tekstualnom okviru za korisnički ID i 1234 u tekstualnom okviru za lozinku. Napišimo kod za modul za autentifikaciju.

<?php
 
$uid = "0$uid1$pwd';";
 
echo $sql;
 
?>

Konačni rezultat će biti:

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

OVDJE,

  • „WHERE uid = ”” provjerava prazan korisnički ID
  • „ILI 1 = 1“ je uvjet koji će uvijek biti istinit
  • "–" komentira dio koji provjerava lozinku.

Gornji upit će vratiti sve korisnike. Sada ćemo upotrijebiti funkciju mysqli_real_escape_string za osiguranje našeg modula za prijavu. Imajte na umu da u stvarnom kodu ova funkcija uzima vezu s bazom podataka kao svoj prvi argument.

<?php
 
$uid = mysqli_real_escape_string($conn, "0$uid1$pwd';";
 
echo $sql;
 
?>

Gornji kod će ispisati:

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Napomena: drugi jednostruki navodnik je izbjegnut, pa će se tretirati kao dio korisničkog ID-a, a lozinka neće biti komentirana.

Najbolja vježba: pobjećiping pomaže, ali parametrizirane pripremljene naredbe u mysqliju ili PDO-u su preporučena obrana od SQL injekcije, jer se podaci nikada ne miješaju u tekst upita.

PHP Md5 i PHP sha1

MD5 je kratica za Message Digest 5, a SHA1 je kratica za Secure Hash Algorithm 1. Obje su jednosmjerne funkcije hashiranja.

Donji kod prikazuje implementaciju md5 i sha1.

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

Pod pretpostavkom da ste spremili datoteku hashes.php u mapu phptuts, idite do URL.

PHP Md5 i PHP sha1

Važno: MD5 i SHA1 su brzi, neslani hashevi i više se ne smatra sigurnim za pohranjivanje lozinki, jer se mogu brzo probiti modernim hardverom i rainbow tablicama. Koristite ih samo za kontrolne zbrojeve koji nisu sigurnosni, a za lozinke koristite donju metodu.

Kako sigurno hashirati lozinke u PHP-u

Za pohranu lozinki, PHP nudi password_hash i password_verify. Oni primjenjuju spor, slani algoritam (bcrypt prema zadanim postavkama), tako da je svaki hash jedinstven i skup za probijanje, čak i ako vam je baza podataka ukradena.

<?php
// Hash a password before storing it in the database
$hash = password_hash("mypassword", PASSWORD_DEFAULT);
 
// Verify the password when the user logs in
if (password_verify("mypassword", $hash)) {
    echo "Password is valid";
} else {
    echo "Invalid password";
}
?>
  • hash_lozinke() generira slani hash za pohranu u bazu podataka; PASSWORD_DEFAULT vas drži na trenutno preporučenom algoritmu.
  • provjera_lozinke() provjerava pokušaj prijave u odnosu na pohranjeni hash bez da ga ikada dešifrira.

Budući da su sol i algoritam pohranjeni unutar hasha, nikada njima sami ne upravljate, što ovo čini ispravnim i sigurnim načinom rukovanja lozinkama u PHP-u.

Pitanja i odgovori

Koristite pripremljene naredbe s vezanim parametrima u mysqli-ju ili PDO-u. One šalju upit i podatke odvojeno, tako da korisnički unos nikada ne može promijeniti strukturu upita. Ovo je jače od ručnog izlaza.ping ulazni.

strip_tags u potpunosti uklanja HTML i PHP oznake, dok ih htmlspecialchars pretvara u sigurne entitete tako da se prikazuju kao tekst. Za izlaz escaping Protiv XSS-a, htmlspecialchars je obično sigurniji izbor.

Generirajte jedinstveni CSRF token po sesiji, ugradite ga kao skriveno polje u svaki obrazac i provjerite ga prilikom slanja. Odbijte svaki zahtjev čiji token nedostaje ili se ne podudara s pohranjenom vrijednošću.

Da. Umjetna inteligencija može skenirati za SQL injekcije, XSS, nesigurno hashiranje lozinki i nesigurno rukovanje datotekama, a zatim objasniti svaki rizik i predložiti rješenje. Tretirajte to kao koristan prvi prolaz, a ne kao zamjenu za sigurnosni pregled.

Da. Zalijepite ranjivi kod, a umjetna inteligencija ga može prepisati s pripremljenim naredbama, ispisati escpingi validaciju ulaza. Testirajte ispravljeni kod i potvrdite ispravku u odnosu na izvorni ulaz napada.

Sažmite ovu objavu uz: