Sigurnosna funkcija PHP-a: strip_tags, filter_var, Md5 i sha1

Potencijalne sigurnosne prijetnje

To su u osnovi dvije grupe ljudi koje mogu napasti vaš sustav

  • Hakeri – s namjerom da dobiju pristup neovlaštenim podacima ili ometaju aplikaciju
  • Korisnici – mogu nevino unijeti pogrešne parametre u obrasce koji mogu imati negativne učinke na web stranicu ili web aplikaciju.

Sljedeće su vrste napada na koje moramo paziti.

SQL Injection – Ova vrsta napada dodaje štetni kod SQL izjave.

To se radi pomoću korisničkih obrazaca za unos ili URL-ova koji koriste varijable.

Dodani kod komentira uvjet u klauzuli WHERE SQL naredbe. Dodani kod također može;

  • ubacite uvjet koji će uvijek biti istinit
  • izbrisati podatke iz tablice
  • ažurirati podatke u tablici
  • Ova vrsta napada obično se koristi za dobivanje neovlaštenog pristupa aplikaciji.

Skriptiranje na više stranica – ova vrsta napada obično ubacuje štetan kod JavaSkripta. To se radi pomoću korisničkih obrazaca za unos kao što su obrasci za kontakt i komentare. Ovo se radi kako bi;

  • Dohvaćanje osjetljivih informacija kao što su podaci o kolačićima
  • Preusmjerite korisnika na drugi URL.
  • Druge prijetnje mogu uključivati ​​– ubacivanje PHP koda, ubacivanje ljuske, ubacivanje e-pošte, otkrivanje izvornog koda skripte itd.

Najbolji primjeri iz prakse za sigurnost PHP aplikacija

Pogledajmo sada neke od najboljih praksi PHP sigurnosti koje moramo uzeti u obzir prilikom razvoja naših aplikacija.

PHP strip_tags

Funkcije strip_tags uklanjaju HTML, JavaScript ili PHP oznake iz niza.

Ova je funkcija korisna kada moramo zaštititi svoju aplikaciju od napada kao što je skriptiranje na više web stranica.

Razmotrimo aplikaciju koja prihvaća komentare korisnika.

<?php

$user_input = "Your site rocks";

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

echo $user_input;

?>

Pod pretpostavkom da ste spremili comments.php u mapu phptuts, potražite URLhttp://localhost/phptuts/comments.php

PHP strip_tags

Pretpostavimo da primate sljedeće kao korisnički unos alert(‘Your site sucks!’);

<?php

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

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

echo $user_input;

?>

Dođite do URL-a http://localhost/phptuts/comments.php

PHP strip_tags

Zaštitimo sada našu aplikaciju od takvih napada pomoću funkcije strip_tags.

<?php

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

echo strip_tags($user_input);

?>

Dođite do URL-a http://localhost/phptuts/comments.php

PHP strip_tags

Funkcija PHP filter_var

Funkcija filter_var koristi se za provjeru valjanosti i čišćenje podataka.

Validacijom se provjerava jesu li podaci ispravne vrste. Numerička provjera valjanosti niza vraća pogrešan rezultat.

Dezinfekcija je uklanjanje ilegalnih znakova iz a niz.

Provjerite ovu vezu za potpunu referencu filter_var

Kod je za sustav komentiranja.

Koristi funkciju filter_var i konstantu FILTER_SANITIZE_STRIPPED za uklanjanje oznaka.

<?php

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

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

Izlaz:

alert('Your site sucks!');

mysqli_real_escape_string funkcija Ova se funkcija koristi za zaštitu aplikacije od SQL ubacivanja.

Pretpostavimo da imamo sljedeću SQL naredbu za provjeru korisničkog ID-a i lozinke.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Zlonamjerni korisnik može unijeti sljedeći kod u tekstni okvir ID-a korisnika. ' ILI 1 = 1 — I 1234 u tekstualnom okviru lozinke Kodirajmo modul za provjeru autentičnosti

<?php

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

$pwd = "1234";

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

echo $sql;

?>

Krajnji rezultat će biti

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

OVDJE,

  • “SELECT * FROM users WHERE user_id = ”” testira prazan ID korisnika
  • “' ILI 1 = 1 “ je uvjet koji će uvijek biti istinit
  • “–” komentira onaj dio koji testira lozinku.

Gornji upit će vratiti sve korisnike. Upotrijebimo sada funkciju mysqli_real_escape_string da osiguramo naš modul za prijavu.

<?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;

?>

Izdat će se gornji kod

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

bilješke drugi jednostruki navodnik je izbjegnut za nas, on će se tretirati kao dio korisničkog ID-a i lozinka neće biti komentirana.

PHP Md5 i PHP sha1

Md5 je akronim za Message Digest 5, a sha1 je akronim za Secure Hash Algorithm 1.

Oba se koriste za šifriranje nizova.

Jednom kada je niz šifriran, zamorno ga je dešifrirati.

Md5 i sha1 vrlo su korisni pri pohranjivanju lozinki u bazu podataka.

Kod u nastavku prikazuje implementaciju md5 i sha1

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

Pod pretpostavkom da ste datoteku hashes.php spremili u mapu phptuts, potražite URL

PHP Md5 i PHP sha1

Kao što možete vidjeti iz gornjih hashova, ako bi napadač dobio pristup vašoj bazi podataka, još uvijek ne bi znao lozinke za prijavu.

rezime

  • Sigurnost se odnosi na mjere za zaštitu aplikacije od slučajnih i zlonamjernih napada.
  • strip_tags funkcija se koristi za uklanjanje oznaka kao što su iz ulaznih podataka
  • filter_var funkcija potvrđuje i php čisti ulazne podatke
  • mysqli_real_escape_string koristi se za čišćenje SQL naredbe. Uklanja zlonamjerne znakove iz izjava
  • i MD5 i SHA1 koriste se za šifriranje lozinke.