PHP-beveiligingsfunctie: strip_tags, filter_var, Md5 en sha1
โก Slimme samenvatting
PHP-beveiliging beschermt webapplicaties tegen aanvallers en onzorgvuldige invoer door gegevens te valideren, te zuiveren en veilig op te slaan. Deze handleiding behandelt de belangrijkste bedreigingen en laat vervolgens zien hoe je `strip_tags`, `filter_var` en `esca` kunt gebruiken.pingEn moderne wachtwoordhashing met password_hash ter bescherming tegen XSS, SQL-injectie en gestolen inloggegevens.

Potentiรซle bedreigingen voor de veiligheid
Er zijn in principe twee groepen mensen die je systeem kunnen aanvallen:
- Hackers โ met de bedoeling toegang te krijgen tot ongeautoriseerde gegevens of de applicatie te verstoren
- Gebruikers kunnen onbedoeld verkeerde parameters invullen in formulieren, wat negatieve gevolgen kan hebben voor een website of webapplicatie.
We moeten op de volgende soorten aanvallen letten.
SQL Injection โ dit type aanval voegt schadelijke code toe aan SQL stellingen.
Dit gebeurt met behulp van gebruikersinvoerformulieren of URLdie gebruikmaken van variabelen.
De toegevoegde code zet de voorwaarde in de WHERE-clausule van een SQL-instructie in commentaar. De toegevoegde code kan ook:
- voeg een voorwaarde in die altijd waar zal zijn
- gegevens uit een tabel verwijderen
- gegevens in een tabel bijwerken
Dit type aanval wordt meestal gebruikt om ongeautoriseerde toegang tot een applicatie te verkrijgen.
Cross-site scripting (XSS) โ bij dit type aanval wordt schadelijke code ingevoegd, meestal JavaScript. Dit wordt gedaan met behulp van gebruikersinvoerformulieren zoals contactformulieren en reactieformulieren. Dit wordt gedaan om:
- Haal gevoelige informatie op, zoals cookiegegevens
- De gebruiker doorverwijzen naar een andere pagina URL.
Andere bedreigingen kunnen onder meer PHP-code-injectie, shell-injectie, e-mailinjectie en het openbaar maken van scriptbroncode omvatten.
Best practices voor PHP-applicatiebeveiliging
Laten we nu eens kijken naar enkele best practices voor PHP-beveiliging waarmee we rekening moeten houden tijdens de ontwikkeling.ping onze applicaties.
PHP strip_tags
De functie strip_tags verwijdert HTML. JavaScript, of PHP-tags uit een tekenreeks.
Deze functie is handig wanneer we onze applicatie moeten beschermen tegen aanvallen zoals cross-site scripting.
Laten we eens kijken naar een applicatie die reacties van gebruikers accepteert.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Als je comments.php in de phptuts-map hebt opgeslagen, ga dan naar de URL http://localhost/phptuts/comments.php
Laten we ervan uitgaan dat u de volgende gebruikersinvoer ontvangt: alert(โYour site sucks!โ);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Blader naar het URL http://localhost/phptuts/comments.php
Laten we onze applicatie nu beveiligen tegen dergelijke aanvallen met behulp van de functie strip_tags.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Blader naar het URL http://localhost/phptuts/comments.php
PHP filter_var-functie
De functie filter_var wordt gebruikt om gegevens te valideren en op te schonen.
Validatie controleert of de gegevens van het juiste type zijn. Een numerieke validatiecontrole op een tekenreeks retourneert een vals resultaat.
Sanering betekent het verwijderen van illegale karakters uit een snaar.
Raadpleeg deze link voor de volledige referentie: filter_var
De onderstaande code is voor het commentaarsysteem. Het gebruikt de functie `filter_var` en de constante `FILTER_SANITIZE_STRIPPED` om tags te verwijderen.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Output:
alert('Your site sucks!');
Let op: FILTER_SANITIZE_STRIPPED (een alias van FILTER_SANITIZE_STRING) is verouderd sinds PHP 8.1. Gebruik voor nieuwe code strip_tags() of, voor een veilige weergave, htmlspecialchars().
PHP mysqli_real_escape_string
De functie mysqli_real_escape_string wordt gebruikt om een โโapplicatie te beschermen tegen SQL-injectie.
Laten we aannemen dat we de volgende SQL-instructie hebben voor het valideren van de gebruikers-ID en het wachtwoord.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Een kwaadwillende gebruiker kan binnenkomen ' OF 1 = 1 โ Voer in het tekstvak voor de gebruikers-ID en in het tekstvak voor het wachtwoord 1234 in. Laten we de authenticatiemodule gaan programmeren.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
Het eindresultaat zal zijn:
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
HIER,
- โWHERE uid = โโ test of de gebruikers-ID leeg is
- โ' OF 1 = 1โ is een voorwaarde die altijd waar zal zijn.
- โโโ zet het gedeelte dat het wachtwoord controleert op een commentaar.
De bovenstaande query retourneert alle gebruikers. Laten we nu de functie `mysqli_real_escape_string` gebruiken om onze inlogmodule te beveiligen. Merk op dat deze functie in de praktijk de databaseverbinding als eerste argument vereist.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
De bovenstaande code zal de volgende uitvoer geven:
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Let op: de tweede enkele aanhalingsteken is ontsnapt, waardoor deze als onderdeel van de gebruikers-ID wordt beschouwd en het wachtwoord niet wordt uitgeschakeld door middel van commentaar.
Beste oefening: aasping Het helpt wel, maar geparameteriseerde prepared statements in mysqli of PDO zijn de aanbevolen verdediging tegen SQL-injectie, omdat de data nooit in de querytekst wordt gemengd.
PHP Md5 en PHP sha1
MD5 is de afkorting voor Message Digest 5, en SHA1 is de afkorting voor Secure Hash Algorithm 1. Het zijn beide eenrichtingshashfuncties.
De onderstaande code laat de implementatie van md5 en sha1 zien.
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Als je het bestand hashes.php in de map phptuts hebt opgeslagen, ga dan naar de betreffende map. URL.
Belangrijk: MD5 en SHA1 zijn snelle, ongezouten hashes en zijn Wordt niet langer als veilig beschouwd voor het opslaan van wachtwoorden.Omdat ze met moderne hardware en rainbow tables snel te kraken zijn. Gebruik ze alleen voor checksums die geen beveiligingsaspecten hebben, en gebruik de onderstaande methode voor wachtwoorden.
Hoe je wachtwoorden veilig kunt hashen in PHP
Voor het opslaan van wachtwoorden biedt PHP de functies `password_hash` en `password_verify`. Deze gebruiken een traag, gesalt algoritme (standaard `bcrypt`), waardoor elke hash uniek is en moeilijk te kraken, zelfs als uw database wordt gestolen.
<?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"; } ?>
- wachtwoord_hash() Genereert een hash met salt die in de database wordt opgeslagen; PASSWORD_DEFAULT zorgt ervoor dat u het momenteel aanbevolen algoritme blijft gebruiken.
- wachtwoordverificatie() Controleert een inlogpoging aan de hand van de opgeslagen hash zonder deze ooit te decoderen.
Omdat het zout en het algoritme in de hash zijn opgeslagen, hoef je deze nooit zelf te beheren. Dit maakt het de juiste, toekomstbestendige manier om wachtwoorden in PHP te verwerken.




