Poboljšajte sigurnost naših aplikacija pomoću PHP -a

Sadržaj
PHP nastao kao svestrani jezik koji nam omogućuje manipulaciju podacima unesenim putem obrasca HTMLNaravno da unutar svog ustava postoji više alata i sposobnosti nego samo ovo.
Svestranost i jednostavnost uporabe čine ga jednim od najčešće korištenih jezika u svijetu za web projekte koji se kreću od jednostavnih obrazaca za kontakt do temelja velikih aplikacija u početku, kao što su Facebook.
Problem svestranosti i jednostavnosti korištenja je u tome što programer nije prisiljen pisati siguran kôd, ali s vrlo nesigurnim značajkama kôd će raditi savršeno, i tu dolaze problemi.
Sigurnost web aplikacija nešto je što nemate od početka PHPMeđutim, to ga ne čini nesigurnim jezikom, jer sigurnost odgovara skupu tehnika i stilova rada koje programer mora znati kako bi ih primijenio na svoje skripte.
OkviriIstina je da se pojavom okvirima Mnoge sigurnosne značajke uključene su prema zadanim postavkama, no nisu svi programeri koristili a okvir u starijim aplikacijama i moguće je da za neke funkcije koristite a okvir biti višak.
Ključevi za postizanje sigurnosti u našim aplikacijama pomoću PHP Oni su: kontrola i oplemenjivanje podataka koje korisnik unosi u obrazac, provjera podrijetla zahtjeva HTTP koje naša aplikacija prima i konačno izbjeći izravno izvršavanje uputa putem obrazaca.
U programiranju postoji pravilo koje je univerzalno, odnosno ne odnosi se samo na PHPČini se da su svi podaci koje aplikacija ne generira potencijalno zlonamjerni, što znači da ako nije nešto što je rezultat koji smo programirali ne možemo vjerovati.
Ovo se načelo primjenjuje na vrijednosti obrazaca, datoteke, Baze podataka, pa je prvi korak za poboljšanje naše sigurnosti filtriranje podataka ako moramo stupiti u interakciju s tim elementima.
Navest ćemo neke od najboljih praksi koje možemo primijeniti prilikom filtriranja podataka koji su uneseni u naš obrazac:
Koristite popise dopuštenih vrijednostiOvom praksom znamo da ako podaci koji dolaze kroz obrazac ne prolaze kroz naš popis dopuštenih i sigurnih vrijednosti, ne bi trebali ići u obradu, u ovom trenutku se mora poslati poruka korisniku da ispravi svoje podatke.
Nikada ne ispravljajte nevažeće podatkeMožda zvuči primamljivo napraviti vrlo inteligentan sustav koji ispravlja podatke s nedosljednostima, ali dugoročno to nam može donijeti probleme i ranjivosti, pa ako otkrijemo nešto nepravilno, ne bismo ga trebali obraditi.
Upotrijebite konvenciju imenovanjaOvom praksom možemo razlikovati sigurne podatke i vrijednosti od onih podataka i vrijednosti koje je unijeo korisnik, čime ćemo unutar programiranja pojačati upotrebu prvih za obradu.
Tamo je dvije vrste filtriranja što možemo učiniti, prva je od vrijednosti koje poznajemo, a druga od vrijednosti koje ne poznajemo.
The prvi To je vrlo jednostavno za napraviti, samo moramo izvesti rutine sa popisima poznatih elemenata i usporediti ih s njim, međutim to je nezgrapno i teško ga je izvesti u većim aplikacijama. The drugi To podrazumijeva stvaranje rutina koje procjenjuju strukturu vrijednosti, a ako ona odgovara onoj koju smatramo sigurnom, puštamo je na obradu, u protivnom bacamo pogrešku, budući da je dinamičke prirode ovo je preporučeni format.
Pogledajmo ispod primjer koda prve vrste filtriranja:
U sljedećem kodu vidjet ćemo kako stvaramo obrazac koji ima element Izaberi Da bi korisnik odabrao boju, budući da korisnik ne mora upisivati ​​podatke za izravni unos, možemo upasti u pogrešku ako ne potvrdimo podatke, ali to samo znači da imamo sigurnosnu prazninu jer s primjenjivim obrascem istim imenima možemo primati potencijalno opasne informacije.
Zato se jednom pošalje vrijednost obrasca POST, naša skripta procjenjuje moguće vrijednosti, a u slučaju bilo koje od očekivanih, prosljeđujemo je našem nizu sigurnih vrijednosti kao što dolje vidimo.

Time smo problem riješili na jednostavan način, međutim da je popis umjesto tri boje imao stotinu, priča o jednostavnosti bila bi drugačija.
U sljedećem primjeru dinamički ćemo provjeriti polje koje je korisnik unijeo na odgovarajući način, za to moramo koristiti regularni izrazi i na taj način izbjeći unos znakova koji dovode u opasnost našu obradu, također procijeniti veličinu unosa i na taj način izbjeći a prelijevanje ili preopterećenje našeg tipa podataka u obradi programa. Pogledajmo kod na slici:

POVEĆAJTE

Ovdje je ključ za postizanje valjanosti ispravno znati što želimo obraditi, na primjer u slučaju korisničkog imena, ono što obično tražimo su alfanumerički znakovi i crtice, zato u regularna fraza Potvrđujemo ovo, također nam treba da bude veće od 0 znakova i maksimalno 32, ako ono što je korisnik unio zadovoljava sve ovo, prolazi validaciju, najbolje od svega je što ovo radi s vrijednošću kao što je sto, budući da je potpuno dinamičan.
Još jedna prijetnja od koje se moramo zaštititi je izvršavanje skripti s drugih web mjesta, zahvaljujući AJAX Možemo poslati obrasce od klijenta na rutu, uključujući vrstu zahtjeva i vrijednosti koje želimo.
Meko mjestoOva vrsta slabosti vrlo olakšava nekome da pregleda naš obrazac i provjeri naša polja, gdje posjedovanjem ovih imena i metode HTTP Pokušajte poslati nesigurne vrijednosti, kako bismo to izbjegli, moramo primijeniti tehnike koje nam omogućuju da provjerimo odakle zahtjev dolazi i ako je sigurno dopustiti njegovo izvršavanje, u protivnom izbjegavajte nastavak puta unutar našeg programa.
Kako bi se izbjegao ovaj problem, sustav žetoni Y sjednice, tako da prilikom podnošenja obrasca procjenjujemo je li sesija ista od one uspostavljene na siguran način, pa zlonamjerni korisnik ne može nastaviti.
Ključni cilj napadača je biti u mogućnosti umetnuti svoj kôd u naše okruženje, za to se koriste injekcije koda SQL, ovaj napad je poznat kao SQL Injection, gdje s nezaštićenim obrascima i nepravilnom obradom možemo primiti upute SQL izravno bez granica. Na primjer, ako je naša ocjena SQL je sljedeće u našem scenariju PHP:

Bilo kojeg korisnika sustava možemo koristiti kao korisničko ime i za lozinka koristimo dvije skripte “--” s ovim možemo bez problema proći sigurnost, budući da su dvije skripte komentar SQL i stoga se lozinka neće ocijeniti.
Ispravan način da procijeniti SQL koji potječe od korisnika, uklanja posebne i opasne znakove, samo ocjenjujući sigurne izraze. Pogledajmo u nastavku primjer kako izbjeći prethodni slučaj:
Prvo što moramo učiniti je a dezinfekcija podataka, odnosno spriječiti da čisti stigne iz oblika u naš SQL; Druga stvar koju moramo ocijeniti je da ako dvije vrijednosti odgovaraju pristupu, ali potonja odgovara logici svake od njih, pogledajmo na slici kako postižemo cilj:

POVEĆAJTE

Ovdje smo učinili korištenje alata pripremljene izjave što nam knjižara dopušta ZOP za povezivanje na Baza podataka, time postižemo da se ono što se unese nikada ne uzima u drugi kontekst koji nije podatak, također vidimo da umjesto korištenja metode POST Koristili smo naš sigurni niz, to znači da su naši podaci već provjereni, pa je rizik manji.
Ovime smo završili ovaj vodič, jer vidimo da su radnje koje možemo poduzeti kako bi naša aplikacija bila sigurnija jednostavne, ne zahtijevaju ljudske napore, no pomažu nam u izbjegavanju najčešćih napada, a možda i najčešćih su dati. Postoji loša percepcija o tome PHP onih koji kažu da je to nesiguran jezik, no stvarnost je da nesigurnost proizvodi programer, budući da jezik ima samo alate koje možemo koristiti za poboljšanje i sprječavanje napada na naše aplikacije putem podataka koje je unijeo korisnik.
wave wave wave wave wave