PHP-sikkerhedsfunktion: strip_tags, filter_var, Md5 og sha1

Potentielle sikkerhedstrusler

De er dybest set 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, som 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 ved at bruge enten brugerinputformularer eller URL'er, der bruger variabler.

Den vedhรฆftede kode kommenterer betingelsen i WHERE-sรฆtningen i en SQL-sรฆtning. Den vedlagte 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 โ€“ denne type angreb indsรฆtter normalt skadelig kode JavaManuskript. Dette gรธres ved hjรฆlp af brugerindtastningsformularer som kontakt os og kommentarformularer. Dette gรธres for at;

  • Hent fรธlsomme oplysninger som f.eks cookies data
  • Omdiriger brugeren til en anden URL.
  • Andre trusler kan omfatte โ€“ PHP-kodeindsprรธjtning, Shell-indsprรธjtning, e-mail-indsprรธjtning, scriptkilde Code Offentliggรธrelse mv.

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

Strip_tags-funktionerne fjerner HTML, JavaScript eller PHP-tags fra en streng.

Denne funktion er nyttig, nรฅr vi skal beskytte vores applikation mod angreb sรฅsom cross site scripting.

Lad os overveje en applikation, der accepterer kommentarer fra brugere.

<?php

$user_input = "Your site rocks";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Hvis du antager, at du har gemt comments.php i mappen phptuts, skal du gรฅ til URL'enhttp://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('Your site sucks!');</script>";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Gรฅ til URL'en 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('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

Gรฅ til URL'en 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 er til kommentarsystemet.

Den bruger filter_var-funktionen og FILTER_SANITIZE_STRIPPED konstant til at fjerne tags.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

Output:

alert('Your site sucks!');

mysqli_real_escape_string funktion Denne funktion bruges til at beskytte en applikation 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 indtaste fรธlgende kode i bruger-id-tekstboksen. ' ELLER 1 = 1 โ€” Og 1234 i kodeordstekstboksen Lad os kode godkendelsesmodulet

<?php

$uid = "' OR 1 = 1 -- ";

$pwd = "1234";

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Slutresultatet bliver

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

HER,

  • โ€œSELECT * FROM users WHERE user_id = โ€โ€ 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 vil returnere alle brugerne. Lad os nu bruge mysqli_real_escape_string-funktionen til at sikre vores login-modul.

<?php

$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");

$pwd = mysqli_real_escape_string("1234");

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Ovenstรฅende kode udlรฆses

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

Bemรฆrk det andet enkelt citat er blevet undgรฅet for os, det vil blive behandlet som en del af bruger-id'et, og adgangskoden vil ikke blive kommenteret.

PHP Md5 og PHP sha1

Md5 er akronymet for Message Digest 5 og sha1 er akronymet for Secure Hash Algorithm 1.

De bruges begge til at kryptere strenge.

Nรฅr en streng fรธrst er blevet krypteret, er det kedeligt at dekryptere den.

Md5 og sha1 er meget nyttige ved lagring af adgangskoder i databasen.

Koden nedenfor viser implementeringen af โ€‹โ€‹md5 og sha1

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

Hvis du antager, at du har gemt filen hashes.php i mappen phptuts, skal du gรฅ til URL'en

PHP Md5 og PHP sha1

Som du kan se fra ovenstรฅende hashes, hvis en angriber fik adgang til din database, ville de stadig ikke kende adgangskoden til at logge pรฅ.

Resumรฉ

  • Sikkerhed refererer til foranstaltninger, der er indfรธrt for at beskytte en applikation mod utilsigtede og ondsindede angreb.
  • strip_tags funktion bruges til at fjerne tags som f.eks fra inputdata
  • filter_var funktion validerer og php renser inputdata
  • mysqli_real_escape_string bruges til at rense SQL-sรฆtning. Det fjerner ondsindede tegn fra udsagn
  • bรฅde MD5 og SHA1 bruges til at kryptere adgangskoden.

Opsummer dette indlรฆg med: