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.

  • ๐Ÿ›ก๏ธ Ken de bedreigingen: De belangrijkste risico's zijn SQL-injectie, cross-site scripting en code-injectie, meestal via formulieren of URL parameters.
  • ๐Ÿงน Striplabels: strip_tags verwijdert HTML, JavaScripts en PHP-tags uit de invoer verwijderen, waardoor het risico op opgeslagen cross-site scripting wordt verkleind.
  • โœ… Invoer valideren: `filter_var` valideert en zuivert gegevens, en bevestigt dat een waarde het verwachte type is voordat uw code deze vertrouwt.
  • ๐Ÿ”’ Ontsnappen of vastbinden: mysqli_real_escape_string ontsnapt aan query-invoer, maar geparameteriseerde prepared statements bieden een sterkere bescherming tegen SQL-injectie.
  • ๐Ÿ”‘ Hash wachtwoorden correct: Bewaar wachtwoorden nooit met MD5 of SHA1; gebruik in plaats daarvan password_hash en password_verify, die gebruikmaken van langzame, met zout verrijkte bcrypt-hashing.
  • ๐Ÿ‘ Verdediging in de diepte: Combineer validatie, escaping, HTTPS en databaseaccounts met minimale privileges in plaats van te vertrouwen op รฉรฉn enkele beheermethode.
  • ๐Ÿค– AI-assistentie: AI-tools kunnen PHP-code controleren op beveiligingslekken en helpen bij het veilig verhelpen van SQL-injecties of XSS-aanvallen.

PHP-beveiliging

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

PHP strip_tags

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

PHP strip_tags

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 strip_tags

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.

PHP Md5 en PHP sha1

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.

Veelgestelde vragen

Gebruik prepared statements met gebonden parameters in mysqli of PDO. Deze versturen de query en de data afzonderlijk, waardoor gebruikersinvoer de querystructuur nooit kan wijzigen. Dit is veiliger dan handmatig escapen.ping invoer.

`strip_tags` verwijdert HTML- en PHP-tags volledig, terwijl `htmlspecialchars` ze omzet naar veilige entiteiten zodat ze als tekst worden weergegeven. Voor de uitvoer van `esca`ping Ter bescherming tegen XSS is htmlspecialchars doorgaans de veiligere keuze.

Genereer per sessie een uniek CSRF-token, voeg dit toe als een verborgen veld in elk formulier en verifieer het bij indiening. Weiger elk verzoek waarvan het token ontbreekt of niet overeenkomt met de opgeslagen waarde.

Ja. AI kan scannen op SQL-injectie, XSS, onveilige wachtwoordhashing en onveilige bestandsverwerking, waarna het elk risico uitlegt en een oplossing suggereert. Beschouw het als een nuttige eerste stap, niet als vervanging voor een volledige beveiligingsaudit.

Ja. Plak de kwetsbare code erin en AI kan deze herschrijven met behulp van voorbereide instructies en een foutmelding geven.pingen invoervalidatie. Test de gecorrigeerde code en bevestig de oplossing aan de hand van de oorspronkelijke aanvalsinvoer.

Vat dit bericht samen met: