PHP-sikkerhetsfunksjon: strip_tags, filter_var, Md5 og sha1
Potensielle sikkerhetstrusler
De er i utgangspunktet to grupper mennesker som kan angripe systemet ditt
- Hackere – med den hensikt å få tilgang til uautoriserte data eller forstyrre applikasjonen
- Brukere – de kan uskyldig legge inn feil parametere i skjemaer som kan ha negative effekter på en nettside eller nettapplikasjon.
Følgende er typene angrep vi må se etter.
SQL Injection – Denne typen angrep legger til skadelig kode SQL uttalelser.
Dette gjøres ved å bruke enten brukerinndataskjemaer eller URL-er som bruker variabler.
Den vedlagte koden kommenterer betingelsen i WHERE-leddet til en SQL-setning. Den vedlagte koden kan også;
- sett inn en betingelse som alltid vil være sann
- slette data fra en tabell
- oppdatere data i en tabell
- Denne typen angrep brukes vanligvis for å få uautorisert tilgang til en applikasjon.
Skripting på tvers av nettsteder – denne typen angrep setter vanligvis inn skadelig kode JavaManus. Dette gjøres ved hjelp av brukerinndataskjemaer som kontakt oss og kommentarskjema. Dette gjøres for å;
- Hent sensitiv informasjon som f.eks informasjonskapsler
- Omdiriger brukeren til en annen URL.
- Andre trusler kan inkludere - PHP-kodeinjeksjon, Shell Injection, Email Injection, Script Source Code Disclosure etc.
Beste praksis for PHP-applikasjonssikkerhet
La oss nå se på noen av de beste fremgangsmåtene for PHP-sikkerhet som vi må vurdere når vi utvikler applikasjonene våre.
PHP strip_tags
Strip_tags-funksjonene fjerner HTML, JavaScript eller PHP-koder fra en streng.
Denne funksjonen er nyttig når vi må beskytte applikasjonen vår mot angrep som skripting på tvers av nettsteder.
La oss vurdere et program som godtar kommentarer fra brukere.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Forutsatt at du har lagret comments.php i phptuts-mappen, bla til URL-enhttp://localhost/phptuts/comments.php
La oss anta at du mottar følgende som brukerinndata alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Bla til URL-en http://localhost/phptuts/comments.php
La oss nå sikre applikasjonen vår fra slike angrep ved å bruke strip_tags-funksjonen.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
Bla til URL-en http://localhost/phptuts/comments.php
PHP filter_var funksjon
Filter_var-funksjonen brukes til å validere og rense data.
Validering sjekker om dataene er av riktig type. En numerisk valideringssjekk på en streng returnerer et falskt resultat.
Sanering er å fjerne ulovlige tegn fra en string.
Sjekk denne lenken for fullstendig referanse filter_var
Koden er for kommentarsystemet.
Den bruker filter_var-funksjonen og FILTER_SANITIZE_STRIPPED konstant for å fjerne tagger.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Utgang:
alert('Your site sucks!');
mysqli_real_escape_string funksjon Denne funksjonen brukes til å beskytte en applikasjon mot SQL-injeksjon.
La oss anta at vi har følgende SQL-setning for å validere bruker-ID og passord.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
En ondsinnet bruker kan skrive inn følgende kode i bruker-ID-tekstboksen. ' ELLER 1 = 1 — Og 1234 i passordtekstboksen La oss kode autentiseringsmodulen
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Sluttresultatet blir
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
HER,
- “SELECT * FROM users WHERE user_id = ”” tester for en tom bruker-ID
- "' ELLER 1 = 1 " er en tilstand som alltid vil være sann
- "–" kommenterer den delen som tester for passordet.
Spørringen ovenfor vil returnere alle brukerne. La oss nå bruke mysqli_real_escape_string-funksjonen for å sikre påloggingsmodulen vår.
<?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; ?>
Koden ovenfor vil sendes ut
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Merknader det andre enkeltsitatet har blitt unnlatt for oss, det vil bli behandlet som en del av bruker-ID-en og passordet vil ikke bli kommentert.
PHP Md5 og PHP sha1
Md5 er akronymet for Message Digest 5 og sha1 er akronymet for Secure Hash Algorithm 1.
De brukes begge til å kryptere strenger.
Når en streng først er kryptert, er det kjedelig å dekryptere den.
Md5 og sha1 er svært nyttige når du lagrer passord i databasen.
Koden nedenfor viser implementeringen av md5 og sha1
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Forutsatt at du har lagret filen hashes.php i phptuts-mappen, bla til URL-en
Som du kan se av hashen ovenfor, hvis en angriper fikk tilgang til databasen din, ville de fortsatt ikke vite passordene for å logge på.
Sammendrag
- Sikkerhet refererer til tiltak iverksatt for å beskytte en applikasjon mot utilsiktede og ondsinnede angrep.
- strip_tags-funksjonen brukes til å fjerne tagger som f.eks fra inndata
- filter_var-funksjonen validerer og php renser inndata
- mysqli_real_escape_string brukes til å rense SQL-setningen. Det fjerner ondsinnede tegn fra uttalelsene
- både MD5 og SHA1 brukes til å kryptere passord.