Uzlabojiet mūsu lietojumprogrammu drošību, izmantojot PHP

Satura rādītājs
PHP parādījās kā daudzpusīga valoda, kas ļauj mums manipulēt ar veidlapā ievadītajiem datiem HTMLProtams, tās satversmē ir vairāk instrumentu un iespēju nekā tikai šis.
Daudzpusība un ērta lietošana padara to par vienu no visplašāk izmantotajām valodām visā pasaulē tīmekļa projektos, sākot no vienkāršām kontaktformām un beidzot ar lielu lietojumprogrammu pamatu, piemēram, Facebook.
Daudzpusības un lietošanas ērtuma problēma ir tā, ka izstrādātājs nav spiests rakstīt drošu kodu, bet ar ļoti nedrošām funkcijām kods darbosies nevainojami, un tieši šeit rodas problēmas.
Tīmekļa lietojumprogrammu drošība ir kaut kas tāds, kas jums nav pieejams no paša sākuma PHPTomēr tas nepadara to par nedrošu valodu, jo drošība atbilst paņēmienu un darba stilu kopumam, kas programmētājam jāzina, lai tos piemērotu saviem skriptiem.
SistēmasIr taisnība, ka ar izskatu ietvari Pēc noklusējuma ir iekļauti daudzi drošības līdzekļi, taču ne katrs izstrādātājs izmantoja a ietvars vecākās lietojumprogrammās, un ir iespējams, ka dažām funkcijām izmantojiet a ietvars būt pārmērība.
Atslēgas, lai panāktu drošību mūsu lietojumprogrammās ar PHP Tie ir: kontrolēt un uzlabot datus, ko lietotājs ievada veidlapā, pārbaudīt pieprasījumu izcelsmi HTTP ka mūsu lietojumprogramma saņem un beidzot izvairās no tiešas instrukciju izpildes, izmantojot veidlapas.
Programmēšanā ir noteikums, un tas ir universāls, tas ir, tas neattiecas tikai uz PHPTas nozīmē, ka visi dati, kas nav ģenerēti lietojumprogrammā, ir potenciāli ļaunprātīgi, tas nozīmē, ka, ja tas nav kaut kas tāds, ko mēs esam ieprogrammējuši, mēs nevaram uzticēties.
Šis princips attiecas uz veidlapu vērtībām, failiem, Datu bāzes, tāpēc pirmais solis mūsu drošības uzlabošanā ir datu filtrēšana, ja mums ir jāsadarbojas ar šiem elementiem.
Mēs uzskaitīsim dažus paraugprakses piemērus, ko varam izmantot, filtrējot mūsu veidlapā ievadītos datus:
Izmantojiet atļauto vērtību sarakstusIzmantojot šo praksi, mēs zinām, ka, ja veidlapā iekļautie dati neiziet caur mūsu atļauto un drošo vērtību sarakstu, tos nevajadzētu apstrādāt, un šajā brīdī lietotājam ir jānosūta ziņojums, lai labotu savus datus.
Nekad neizlabojiet nederīgos datusVar likties vilinoši izveidot ļoti inteliģentu sistēmu, kas koriģē datus ar neatbilstībām, taču ilgtermiņā tas var radīt problēmas un ievainojamību, tādēļ, ja mēs atklājam kaut ko neregulāru, mums tas nav jāapstrādā.
Izmantojiet nosaukšanas konvencijuIzmantojot šo praksi, mēs varam atšķirt drošus datus un vērtības no tiem datiem un vērtībām, ko ievadījis lietotājs, ar to mēs programmēšanas laikā pastiprināsim iepriekšējo izmantošanu apstrādei.
Tur ir divu veidu filtrēšana ko mēs varam darīt, pirmais attiecas uz vērtībām, kuras mēs zinām, un otrs - par vērtībām, kuras mēs nezinām.
pirmais To ir ļoti viegli izdarīt, mums ir jāveic tikai rutīnas ar zināmu elementu sarakstiem un jāsalīdzina ar to, tomēr tas ir apgrūtinoši un grūti izpildāms lielākos lietojumos. otrais Tas nozīmē izveidot rutīnas, kas novērtē vērtības struktūru, un, ja tā atbilst tai, kuru mēs uzskatām par drošu, mēs to atstājam apstrādei, pretējā gadījumā mēs izlaižam kļūdu, jo tas ir dinamisks raksturs, tas ir ieteicamais formāts.
Tālāk apskatīsim pirmā filtrēšanas veida koda piemēru:
Turpmākajā kodā mēs redzēsim, kā mēs veidojam veidlapu ar elementu izvēlieties Lai lietotājs varētu izvēlēties krāsu, jo lietotājam nav jāraksta dati, lai to ievadītu tieši, mēs varam kļūdīties, neapstiprinot informāciju, bet tas nozīmē tikai to, ka mums ir drošības nepilnības, jo ar veidlapu, kas tiek piemērota ar tiem pašiem nosaukumiem mēs varam saņemt potenciāli bīstamu informāciju.
Tāpēc, tiklīdz veidlapas vērtība ir nosūtīta POST, mūsu skripts novērtē iespējamās vērtības, un, ja tā ir kāda no gaidītajām, mēs to nododam mūsu drošo vērtību masīvam, kā redzams zemāk.

Ar to mēs esam atrisinājuši problēmu vienkāršā veidā, tomēr, ja sarakstā trīs krāsu vietā būtu bijis simts, stāsts par vienkāršību būtu citāds.
Šajā piemērā mēs dinamiski validēsim lauku, ko lietotājs ievadījis atbilstošā veidā, tāpēc mums tas jāizmanto regulāras izteiksmes un šādā veidā izvairieties no rakstzīmju ievadīšanas, kas apdraud mūsu apstrādi, novērtējiet arī ieraksta lielumu un tādējādi izvairieties no a pārplūde vai mūsu datu tipa pārslodze programmas apstrādē. Apskatīsim kodu attēlā:

PALIELINĀT

Šeit galvenais, lai panāktu validāciju, ir pareizi zināt, ko mēs vēlamies apstrādāt, piemēram, lietotājvārda gadījumā mēs parasti lūdzam burtciparu rakstzīmes un defises. regulāra frāze Mēs to apstiprinām, mums arī ir nepieciešams, lai tas būtu garāks par 0 rakstzīmēm un ne vairāk kā 32, ja lietotāja ievadītais atbilst tam visam, tas iziet validāciju, labākais ir tas, ka tas darbojas ar vērtību, piemēram, simts, jo tas ir pilnīgi dinamisks.
Vēl viens drauds, pret kuru mums ir jāaizsargājas, ir skriptu izpilde no citām vietnēm, pateicoties AJAX Mēs varam nosūtīt veidlapas no klienta uz maršrutu, ieskaitot pieprasījuma veidu un vēlamās vērtības.
Vājā vietaŠāda veida vājuma dēļ kādam ir ļoti viegli pārbaudīt mūsu veidlapu un pārbaudīt mūsu laukus, kur pieder šie vārdi un metode HTTP Mēģiniet nosūtīt nedrošas vērtības, lai no tā izvairītos, mums ir jāizmanto metodes, kas ļauj mums pārbaudīt, no kurienes nāk pieprasījums un vai ir droši atļaut tā izpildi, pretējā gadījumā izvairieties turpināt ceļu mūsu programmas ietvaros.
Lai izvairītos no šīs problēmas, izveidota sistēma žetoni Y sesijas, lai, iesniedzot veidlapu, mēs novērtētu, vai sesija ir tāda pati kā drošā veidā izveidotā, un tādējādi ļaunprātīgais lietotājs nevar turpināt.
Uzbrucēja galvenais mērķis ir spēt ievietot savu kodu mūsu vidē, tāpēc viņi izmanto koda injekcijas SQL, šis uzbrukums ir pazīstams kā SQL injekcija, kur ar nenodrošinātām veidlapām un nepareizu apstrādi mēs varam saņemt norādījumus SQL tieši bez ierobežojumiem. Piemēram, ja mūsu vērtējums SQL mūsu skriptā ir šāds PHP:

Mēs varam izmantot jebkuru sistēmas lietotāju kā lietotājvārdu un parole mēs izmantojam divus skriptus “--” ar to mēs varam bez problēmām nodot drošību, jo divi skripti ir komentārs SQL un tāpēc parole netiks novērtēta.
Pareizais ceļš uz novērtēt SQL kas nāk no lietotāja, noņem īpašās un bīstamās rakstzīmes, novērtējot tikai drošas izteiksmes. Tālāk apskatīsim piemēru, kā izvairīties no iepriekšējā gadījuma:
Pirmā lieta, kas mums jādara, ir a datu dezinfekcija, tas ir, neļaujiet tai nonākt tīrā veidā no formas uz mūsu SQL; Otra lieta, kas mums jānovērtē, ir tāda, ka, ja abas vērtības atbilst piekļuves nodrošināšanai, bet pēdējās atbilst katras vērtības loģikai, redzēsim attēlā, kā mēs sasniedzam mērķi:

PALIELINĀT

Šeit mēs esam izmantojuši rīku sagatavoti paziņojumi ko mums atļauj grāmatnīca ACVN savienojumam ar Datu bāze, tādējādi mēs panākam, ka ievadītais nekad netiek ņemts citā kontekstā, kas nav dati, mēs arī redzam, ka tā vietā, lai izmantotu metodi POST Mēs esam izmantojuši savu drošo masīvu, tas nozīmē, ka mūsu dati jau ir pārbaudīti, tāpēc risks ir mazāks.
Ar to mēs esam pabeiguši šo apmācību, jo redzam, ka darbības, ko varam veikt, lai padarītu mūsu lietojumprogrammu drošāku, ir vienkāršas, tām nav vajadzīgas cilvēku pūles, tomēr tās palīdz mums izvairīties no visbiežāk sastopamajiem un, iespējams, arī biežākajiem uzbrukumiem . ir doti. Ir slikts priekšstats par PHP no tiem, kas saka, ka tā ir nedroša valoda, bet patiesībā nedrošību rada programmētājs, jo valodai ir tikai rīki, kurus mēs varam izmantot, lai uzlabotu un novērstu uzbrukumus mūsu lietojumprogrammām, izmantojot lietotāja ievadītos datus.

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave