PHP-sikkerhedsfunktion: strip_tags, filter_var, Md5 og sha1

⚡ Smart opsummering

PHP Security beskytter webapplikationer mod angribere og uforsigtig input ved at validere, rense og lagre data sikkert. Denne gennemgang dækker de vigtigste trusler og viser derefter strip_tags, filter_var og esca.pingog moderne adgangskode-hashing med password_hash for at forsvare mod XSS, SQL-injektion og stjålne legitimationsoplysninger.

  • 🛡️ Kend truslerne: De primære risici er SQL-injektion, cross-site scripting og kodeinjektion, som normalt leveres via formularer eller URL parametre.
  • 🧹 Strip-tags: strip_tags fjerner HTML, JavaScript og PHP-tags fra input, hvilket reducerer risikoen for gemt cross-site scripting.
  • ✅ Valider input: filter_var validerer og renser data og bekræfter, at en værdi er den forventede type, før din kode stoler på den.
  • 🔒 Flugt eller binding: mysqli_real_escape_string undslipper forespørgselsinput, men parametriserede forberedte sætninger er det stærkere forsvar mod SQL-injektion.
  • 🔑 Hash-adgangskoder korrekt: Gem aldrig adgangskoder med MD5 eller SHA1; brug password_hash og password_verify, som anvender langsom, saltet bcrypt-hashing.
  • 💡 Forsvar i dybden: Kombinér validering, escaping, HTTPS og databasekonti med mindst rettigheder i stedet for at stole på et enkelt kontrolelement.
  • 🤖 AI Assist: AI-værktøjer kan revidere PHP-kode for sikkerhedsfejl og hjælpe med at rette en SQL-injektions- eller XSS-svaghed sikkert.

PHP-sikkerhed

Potentielle sikkerhedstrusler

Der er grundlæggende to grupper af mennesker, der kan angribe dit system:

  • Hackere – med den hensigt at få adgang til uautoriserede data eller forstyrre applikationen
  • Brugere – de kan uskyldigt indtaste forkerte parametre i formularer, hvilket kan have negative effekter på et websted eller en webapplikation.

Følgende er den slags angreb, som vi skal holde øje med.

SQL Injection – denne type angreb tilføjer skadelig kode til SQL udsagn.

Dette gøres enten ved hjælp af brugerinputformularer eller URLs, der bruger variabler.

Den tilføjede kode kommenterer betingelsen i WHERE-klausulen i en SQL-sætning. Den tilføjede kode kan også:

  • indsæt en betingelse, der altid vil være sand
  • slette data fra en tabel
  • opdatere data i en tabel

Denne type angreb bruges normalt til at få uautoriseret adgang til en applikation.

Cross-site scripting (XSS) – denne type angreb indsætter skadelig kode, normalt JavaScript. Dette gøres ved hjælp af brugerinputformularer såsom kontaktformularer og kommentarformularer. Dette gøres for at:

  • Hent følsomme oplysninger som f.eks cookiedata
  • Omdiriger brugeren til en anden URL.

Andre trusler kan omfatte PHP-kodeinjektion, shell-injektion, e-mail-injektion og afsløring af scriptkildekode.

PHP Application Security Bedste Practices

Lad os nu se på nogle af de bedste praksisser inden for PHP-sikkerhed, som vi skal overveje, når vi udviklerping vores applikationer.

PHP strip_tags

Funktionen strip_tags fjerner HTML, JavaScripteller PHP-tags fra en streng.

Denne funktion er nyttig, når vi skal beskytte vores applikation mod angreb som f.eks. cross-site scripting.

Lad os se på en applikation, der accepterer kommentarer fra brugere.

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

Hvis du har gemt comments.php i phptuts-mappen, skal du gå til URL http://localhost/phptuts/comments.php

PHP strip_tags

Lad os antage, at du modtager følgende som brugerinput: alert(‘Your site sucks!’);

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

Gå til URL http://localhost/phptuts/comments.php

PHP strip_tags

Lad os nu sikre vores applikation mod sådanne angreb ved hjælp af strip_tags-funktionen.

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

Gå til URL http://localhost/phptuts/comments.php

PHP strip_tags

PHP filter_var funktion

Filter_var-funktionen bruges til at validere og rense data.

Validering kontrollerer, om dataene er af den rigtige type. Et numerisk valideringstjek på en streng returnerer et falsk resultat.

Sanering er at fjerne ulovlige tegn fra en streng.

Tjek dette link for den komplette reference: filter_var

Koden nedenfor er til kommentarsystemet. Det bruger filter_var-funktionen og FILTER_SANITIZE_STRIPPED-konstanten til at fjerne tags.

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

Output:

alert('Your site sucks!');

Bemærk: FILTER_SANITIZE_STRIPPED (et alias for FILTER_SANITIZE_STRING) er udfaset fra PHP 8.1. Brug strip_tags() eller htmlspecialchars() for sikker visning til ny kode.

PHP mysqli_real_escape_string

Funktionen mysqli_real_escape_string bruges til at beskytte et program mod SQL-injektion.

Lad os antage, at vi har følgende SQL-sætning til validering af bruger-id og adgangskode.

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

En ondsindet bruger kan komme ind 'ELLER 1 = 1 — i tekstfeltet bruger-id og 1234 i tekstfeltet adgangskode. Lad os kode godkendelsesmodulet.

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

Slutresultatet bliver:

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

HER,

  • "WHERE uid = "" tester for et tomt bruger-id
  • "'ELLER 1 = 1" er en betingelse, der altid vil være sand
  • "–" kommenterer den del, der tester for adgangskoden.

Ovenstående forespørgsel returnerer alle brugerne. Lad os nu bruge funktionen mysqli_real_escape_string til at sikre vores login-modul. Bemærk, at i den virkelige kode tager denne funktion databaseforbindelsen som sit første argument.

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

Ovenstående kode vil udskrive:

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

Bemærk: Det andet enkelte anførselstegn er blevet escapet, så det vil blive behandlet som en del af bruger-id'et, og adgangskoden vil ikke blive kommenteret ud.

Bedste praksis: escaping hjælper, men parametriserede forberedte sætninger i mysqli eller PDO er det anbefalede forsvar mod SQL-injektion, fordi dataene aldrig blandes i forespørgselsteksten.

PHP Md5 og PHP sha1

MD5 er akronymet for Message Digest 5, og SHA1 er akronymet for Secure Hash Algorithm 1. Begge er envejs hashingfunktioner.

Koden nedenfor viser implementeringen af ​​md5 og sha1.

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

Hvis du har gemt filen hashes.php i mappen phptuts, skal du gå til URL.

PHP Md5 og PHP sha1

Vigtig: MD5 og SHA1 er hurtige, usaltede hashes og er betragtes ikke længere som sikkert at opbevare adgangskoder med, fordi de hurtigt kan knækkes med moderne hardware og regnbuetabeller. Brug dem kun til ikke-sikkerhedsrelaterede checksummer, og brug metoden nedenfor til adgangskoder.

Sådan hasher du adgangskoder sikkert i PHP

Til lagring af adgangskoder tilbyder PHP password_hash og password_verify. Disse anvender en langsom, saltet algoritme (bcrypt som standard), så hver hash er unik og dyr at knække, selvom din database bliver stjålet.

<?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";
}
?>
  • password_hash() genererer en saltet hash, der skal gemmes i databasen; PASSWORD_DEFAULT holder dig på den aktuelt anbefalede algoritme.
  • password_verify() tjekker et loginforsøg mod den lagrede hash uden nogensinde at dekryptere den.

Fordi salt og algoritme er gemt inde i hashen, administrerer du dem aldrig selv, hvilket gør dette til den korrekte og fremtidssikrede måde at håndtere adgangskoder i PHP.

Ofte Stillede Spørgsmål

Brug forberedte statements med bundne parametre i mysqli eller PDO. De sender forespørgslen og dataene separat, så brugerinput aldrig kan ændre forespørgselsstrukturen. Dette er stærkere end manuel esca.ping input.

strip_tags fjerner HTML- og PHP-tags helt, mens htmlspecialchars konverterer dem til sikre enheder, så de vises som tekst. For output skal du bruge esca.ping I modsætning til XSS er htmlspecialchars normalt det sikreste valg.

Generer et unikt CSRF-token pr. session, integrer det som et skjult felt i hver formular, og verificer det ved afsendelse. Afvis enhver anmodning, hvis token mangler eller ikke matcher den gemte værdi.

Ja. AI kan scanne for SQL-injektion, XSS, usikker adgangskodehashing og usikker filhåndtering, og derefter forklare hver risiko og foreslå en løsning. Betragt det som et nyttigt første forsøg, ikke en erstatning for en sikkerhedsgennemgang.

Ja. Indsæt den sårbare kode, og AI kan omskrive den med forberedte sætninger og outputte esca.pingog inputvalidering. Test den korrigerede kode, og bekræft rettelsen mod det oprindelige angrebsinput.

Opsummer dette indlæg med: