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.

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
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
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 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.
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.




