PHP Säkerhetsfunktion: strip_tags, filter_var, Md5 och sha1

⚡ Smart sammanfattning

PHP Security skyddar webbapplikationer från angripare och slarvig inmatning genom att validera, sanera och säkert lagra data. Denna genomgång täcker de viktigaste hoten och visar sedan strip_tags, filter_var och esca.pingoch modern lösenordshashing med password_hash för att försvara mot XSS, SQL-injektion och stulna inloggningsuppgifter.

  • 🛡️ Känn till hoten: De största riskerna är SQL-injektion, cross-site scripting och kodinjektion, vanligtvis levererade via formulär eller URL parametrar.
  • 🧹 Remsetiketter: strip_tags tar bort HTML, JavaScript och PHP-taggar från indata, vilket minskar risken för lagrad skriptning mellan webbplatser.
  • Validera inmatning: filter_var validerar och sanerar data och bekräftar att ett värde är av den förväntade typen innan din kod litar på det.
  • 🔒 Fly eller binda: mysqli_real_escape_string undkommer frågeinmatning, men parametriserade förberedda satser är det starkare försvaret mot SQL-injektion.
  • 🔑 Hasha lösenord rätt: Lagra aldrig lösenord med MD5 eller SHA1; använd password_hash och password_verify, som tillämpar långsam, saltad bcrypt-hashing.
  • ???? Försvar på djupet: Kombinera validering, escaping, HTTPS och databaskonton med lägst behörighet istället för att förlita sig på en enda kontroll.
  • 🤖 AI Assist: AI-verktyg kan granska PHP-kod för säkerhetsbrister och hjälpa till att åtgärda en SQL-injektion eller XSS-svaghet på ett säkert sätt.

PHP-säkerhet

Potentiella säkerhetshot

Det finns i princip två grupper av människor som kan attackera ditt system:

  • Hackare – med avsikt att få tillgång till obehörig data eller störa applikationen
  • Användare – de kan oskyldigt ange fel parametrar i formulär, vilket kan ha negativa effekter på en webbplats eller webbapplikation.

Följande är de typer av attacker som vi måste hålla utkik efter.

SQL Injection – den här typen av attack lägger till skadlig kod till SQL uttalanden.

Detta görs antingen med hjälp av användarinmatningsformulär eller URLsom använder variabler.

Den tillagda koden kommenterar ut villkoret i WHERE-klausulen i ett SQL-uttryck. Den tillagda koden kan också:

  • infoga ett villkor som alltid kommer att vara sant
  • radera data från en tabell
  • uppdatera data i en tabell

Denna typ av attack används vanligtvis för att få obehörig åtkomst till en applikation.

Cross-site scripting (XSS) – den här typen av attack infogar skadlig kod, vanligtvis JavaSkript. Detta görs med hjälp av användarinmatningsformulär som kontaktformulär och kommentarsformulär. Detta görs för att:

  • Hämta känslig information som t.ex cookiedata
  • Omdirigera användaren till en annan URL.

Andra hot kan inkludera PHP-kodinjektion, skalinjektion, e-postinjektion och avslöjande av skriptkällkod.

Bästa metoder för PHP-applikationssäkerhet

Låt oss nu titta på några av de bästa säkerhetsmetoderna för PHP som vi måste tänka på när vi utvecklarping våra applikationer.

PHP strip_tags

Funktionen strip_tags tar bort HTML, JavaScript, eller PHP-taggar från en sträng.

Den här funktionen är användbar när vi måste skydda vår applikation mot attacker som cross-site scripting.

Låt oss titta på en applikation som tar emot kommentarer från användare.

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

Om du har sparat comments.php i mappen phptuts, bläddra till URL http://localhost/phptuts/comments.php

PHP strip_tags

Låt oss anta att du får följande som användarinmatning: alert(‘Your site sucks!’);

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

Bläddra till URL http://localhost/phptuts/comments.php

PHP strip_tags

Låt oss nu säkra vår applikation från sådana attacker med hjälp av funktionen strip_tags.

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

Bläddra till URL http://localhost/phptuts/comments.php

PHP strip_tags

PHP filter_var funktion

Filter_var-funktionen används för att validera och sanera data.

Validering kontrollerar om uppgifterna är av rätt typ. En numerisk valideringskontroll på en sträng returnerar ett falskt resultat.

Sanering är att ta bort olagliga tecken från en sträng.

Kolla den här länken för den fullständiga referensen: filter_var

Koden nedan är för kommentarsystemet. Den använder filter_var-funktionen och FILTER_SANITIZE_STRIPPED-konstanten för att ta bort taggar.

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

Produktion:

alert('Your site sucks!');

Obs: FILTER_SANITIZE_STRIPPED (ett alias för FILTER_SANITIZE_STRING) är föråldrat från och med PHP 8.1. För ny kod, använd strip_tags() eller, för säker visning, htmlspecialchars().

PHP mysqli_real_escape_string

Funktionen mysqli_real_escape_string används för att skydda en applikation mot SQL-injektion.

Låt oss anta att vi har följande SQL-sats för att validera användar-ID och lösenord.

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

En illvillig användare kan komma in ' ELLER 1 = 1 — i textrutan för användar-ID och 1234 i textrutan för lösenord. Låt oss koda autentiseringsmodulen.

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

Slutresultatet blir:

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

HÄR,

  • "WHERE uid = "" testar för ett tomt användar-ID
  • "'ELLER 1 = 1" är ett villkor som alltid kommer att vara sant
  • "–" kommenterar bort den del som testar lösenordet.

Ovanstående fråga returnerar alla användare. Låt oss nu använda funktionen mysqli_real_escape_string för att säkra vår inloggningsmodul. Observera att i verklig kod tar den här funktionen databasanslutningen som sitt första argument.

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

Ovanstående kod kommer att mata ut:

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

Obs: det andra enkla citattecknet har escapeats, så det kommer att behandlas som en del av användar-ID:t och lösenordet kommer inte att kommenteras bort.

Bästa praxis: escaping hjälper, men parametriserade förberedda uttalanden i mysqli eller PDO är det rekommenderade försvaret mot SQL-injektion, eftersom data aldrig blandas in i frågetexten.

PHP Md5 och PHP sha1

MD5 är förkortningen för Message Digest 5, och SHA1 är förkortningen för Secure Hash Algorithm 1. Båda är envägshashfunktioner.

Koden nedan visar implementeringen av md5 och sha1.

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

Om du har sparat filen hashes.php i mappen phptuts, bläddra till URL.

PHP Md5 och PHP sha1

Viktigt: MD5 och SHA1 är snabba, osaltade hashkoder och är anses inte längre säkert för att lagra lösenord, eftersom de kan knäckas snabbt med modern hårdvara och regnbågstabeller. Använd dem endast för icke-säkerhetsrelaterade kontrollsummor och använd metoden nedan för lösenord.

Hur man säkert hashar lösenord i PHP

För lösenordslagring tillhandahåller PHP password_hash och password_verify. Dessa använder en långsam, saltad algoritm (bcrypt som standard), så varje hash är unik och dyr att knäcka, även om din databas blir stulen.

<?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() genererar en saltad hash att lagra i databasen; PASSWORD_DEFAULT håller dig på den aktuella rekommenderade algoritmen.
  • lösenordsverifiera() kontrollerar ett inloggningsförsök mot den lagrade hashen utan att någonsin dekryptera den.

Eftersom saltet och algoritmen lagras inuti hashen hanterar du dem aldrig själv, vilket gör detta till det korrekta, framtidssäkra sättet att hantera lösenord i PHP.

Vanliga frågor

Använd förberedda satser med bundna parametrar i mysqli eller PDO. De skickar frågan och data separat, så användarinmatning kan aldrig ändra frågestrukturen. Detta är starkare än att manuellt esca.ping inmatning.

strip_tags tar bort HTML- och PHP-taggar helt, medan htmlspecialchars konverterar dem till säkra entiteter så att de visas som text. För utdata, escaping Mot XSS är htmlspecialchars vanligtvis det säkrare valet.

Generera en unik CSRF-token per session, bädda in den som ett dolt fält i varje formulär och verifiera den vid inskickning. Avvisa alla förfrågningar vars token saknas eller inte matchar det lagrade värdet.

Ja. AI kan söka efter SQL-injektion, XSS, osäker lösenordshashing och osäker filhantering, och sedan förklara varje risk och föreslå en åtgärd. Betrakta det som ett bra första steg, inte en ersättning för en säkerhetsgranskning.

Ja. Klistra in den sårbara koden, så kan AI skriva om den med förberedda satser och skriva ut esca.pingoch validering av indata. Testa den korrigerade koden och bekräfta korrigeringen mot den ursprungliga attackindatan.

Sammanfatta detta inlägg med: