namai » Sveikata » Linksmi faktai apie seksą, apie kuriuos niekas kitas jums nepasakojo. Įdomūs faktai apie seksą, kurių niekas jums nepasakė prieš tai, kai baigiasi lengva 4

Linksmi faktai apie seksą, apie kuriuos niekas kitas jums nepasakojo. Įdomūs faktai apie seksą, kurių niekas jums nepasakė prieš tai, kai baigiasi lengva 4

Reikia apibrėžti geriausias laikas pastoti, apsisaugoti nuo nepageidaujamo nėštumo ar sužinoti, kada seksas su partneriu bus geriausias? Anksčiau moterys turėjo vykti pas savo gydytoją konsultacijai, o dabar jos turi naują širdies draugą – išmanųjį telefoną.

V pastaraisiais metais Yra daug programėlių moterims, kurios leidžia lengvai sekti vaisingas dienas ir ovuliaciją bei užsirašyti asmeninius užrašus. Be to, jie turi daug kitų funkcijų. Viena iš tokių programų yra „Glow“, kuria jau naudojasi 47 milijonai moterų. Švytėjimas leidžia stebėti tokius dalykus kaip moterų nuotaika ir sekso kokybė bei dažnumas. Šios programos dėka tapo įmanoma juos gauti Įdomūs faktai apie moterų iš viso pasaulio intymų gyvenimą.

Geriausios moterys moterims

1. Ar pasiilgstate intymumo? Važiuok į Kanadą. Pasirodo, kanadiečiai seksu užsiima 45% dažniau nei vidutiniai programėlių vartotojai.

2. Tačiau būkite atsargūs: Kanada yra puiki vieta pastoti. Kanados moterys gali pastoti 21% lengviau nei kitos.

3. Australijos moterys taip pat dažnai užsiima seksu – 37% daugiau nei vidutinės programėlės naudotojos.

4. Nereikia nė sakyti, kad moterys Australijoje taip pat turi gerą galimybę pastoti? Jie turi 14% daugiau nei kiti vartotojai.

5. JAV – gera vieta būti laimingas. Amerikietės 16% dažniau nei kitos moterys turi lytinių santykių.

6. Blogiausia vieta būti laimingam? Lotynų Amerika. Čia moterys seksu užsiima 4% rečiau nei vidutinės programėlės naudotojos.

Seksualinis apetitas

1. Moters seksualinis apetitas atitinka ją mėnesinis ciklas... Pirmoji ciklo diena yra pirmoji mėnesinių diena, kuri trunka maždaug penkias dienas. Taigi moterys mažiausiai domisi seksu nuo vienos iki penkių dienų per mėnesį.

2. Daugelis moterų praneša apie energijos lygio ar nuotaikos pasikeitimą šiuo laikotarpiu, o tai dažniausiai siejama su lytinio potraukio sumažėjimu. Taip pat moterys mažiau domisi seksu visą savaitę po menstruacijų.

3. Dauguma moterų vėl pradeda mylėtis 12 ciklo dieną.

4. Daugelis moterų reguliariai turi lytinių santykių nuo 12 iki 14 ciklo dienos. Programėlė „Glow“ šias dienas vadina „seksualumo viršūne“.

5. Tiesą sakant, moterys seksualiausios jaučiasi 13 ir 14 ciklo dieną. Tačiau čia yra įdomus dalykas: šiuo metu jie nebūtinai turi geriausią ir labiausiai pasitenkinimą teikiantį seksą.

6. Dauguma moterų mėgaujasi seksu paskutinę, 30-ąją ciklo dieną. Ši diena švytėjime pažymėta kaip „orgazmų viršūnė“.

Ar moterys patenkintos

1. Moterys laimingiausios jaučiasi 15 ir 16 ciklo dieną, taip pat kai pastarosiomis dienomis turėjo daug lytinių santykių.

2. Glow vartotojai per dvejus metus užregistravo 7,6 milijono seksualinių kontaktų.

3. Tai reiškia, kad kas minutę mažiausiai septynios Glow programėlę besinaudojančios moterys užsiima seksu.

4. Beje, vartotojai taip pat yra įsimylėję 2 milijonus kartų. Programėlė taip pat seka 88 000 porų sekso ciklus ir vaisingumą.

5. Deja, nepaisant esamų seksualinių kontaktų, ne visos moterys jais patenkintos. Beveik trečdalis moterų yra pasirengusios atsisakyti sekso, o ne išmaniojo telefono.

6. Tačiau tai vis tiek reiškia, kad du trečdaliai mieliau atsisakytų telefonų nei sekso.

Sveiki. Mano vardas Sasha Barrannik. „Mail.Ru Group“ vadovauju interneto svetainių kūrimo skyriui, kuriame dirba 15 darbuotojų. Išmokome kurti svetaines dešimtims milijonų vartotojų ir ramiai bendraujame su keliais milijonais kasdienės auditorijos. Pats web kūrimu užsiimu apie 20 metų, o pastaruosius 15 metų daugiausiai programuoju PHP. Nors per šį laiką kalbos galimybės ir požiūris į plėtrą labai pasikeitė, pagrindinių pažeidžiamumų suvokimas ir gebėjimas nuo jų apsiginti išlieka pagrindiniais bet kurio kūrėjo įgūdžiais.

Internete yra daug straipsnių ir saugos vadovų. Ši knyga man pasirodė gana išsami, tuo pačiu lakoniška ir suprantama. Tikiuosi, kad tai padės išmokti ko nors naujo ir padaryti jūsų svetaines patikimesnes ir saugesnes.

P. S. Knyga ilga, todėl vertimas bus išdėstytas keliuose straipsniuose. Taigi pradėkime...

Dar viena knyga apie PHP saugumą?

Yra daug būdų, kaip pradėti knygą apie PHP saugumą. Deja, neskaičiau nė vieno, tad rašydamas turėsiu tai išsiaiškinti. Galbūt pradėsiu nuo paprasčiausio ir tikiuosi, kad viskas pavyks.

Jei pažvelgsime į abstrakčią žiniatinklio programą, kurią internete paleido įmonė X, galime manyti, kad joje yra nemažai komponentų, į kuriuos įsilaužus gali būti padaryta didelė žala. Kuris, pavyzdžiui?

  1. Žala vartotojams: gauti prieigą prie el. pašto, slaptažodžių, asmeninių duomenų, detalių banko kortelės, verslo paslaptys, kontaktų sąrašai, operacijų istorija ir giliai saugomos paslaptys (pvz., kažkas vadina savo šunį blizgiu). Šių duomenų nutekėjimas kenkia vartotojams (fiziniams asmenims ir įmonėms). Žiniatinklio programos, kurios netinkamai naudoja tokius duomenis, ir svetainės, kurios savo naudai naudoja vartotojų pasitikėjimą, taip pat gali būti žalingos.
  2. Žala pačiai įmonei X: dėl vartotojams padarytos žalos prastėja reputacija, tenka mokėti kompensacijas, prarandama svarbi verslo informacija, atsiranda papildomų išlaidų - infrastruktūrai, saugumo gerinimui, padarinių likvidavimui, teisinės išlaidos, didelės pašalpos atleidžiamiems aukščiausio lygio vadovams ir kt.
Daugiausia dėmesio skirsiu šioms dviem kategorijoms, nes jos apima daugumą nepatogumų, kurių žiniatinklio programų saugos sistema turėtų išvengti. Visos įmonės, susidūrusios su rimtais saugumo pažeidimais, greitai rašo pranešimuose spaudai ir interneto svetainėse, kaip yra jautrios jai. Tad patariu iš anksto visa širdimi pajusti šios problemos svarbą, prieš su ja susiduriant praktiškai.

Deja, saugumo problemos dažnai sprendžiamos atgaline data. Manoma, kad svarbiausia sukurti veikiančią, vartotojų poreikius atitinkančią aplikaciją su priimtinu biudžetu ir terminais. Tai visiškai suprantamas prioritetų rinkinys, tačiau saugumo negalima ignoruoti amžinai. Daug geriau to nepamiršti nuolat, konkrečius sprendimus diegiant kūrimo metu, kai pokyčių kaina dar nedidelė.

Antrinis saugumo pobūdis daugiausia yra programavimo kultūros rezultatas. Kai kurie programuotojai išpila šaltą prakaitą pagalvodami apie pažeidžiamumą, o kiti gali ginčytis dėl pažeidžiamumo egzistavimo, kol neįrodo, kad tai visai ne pažeidžiamumas. Tarp šių dviejų kraštutinumų yra daug programuotojų, kurie tik gūžčios pečiais, nes jiems reikalai dar nepasisekė. Jiems sunku suprasti šį keistą pasaulį.

Kadangi žiniatinklio programos saugos sistema turi apsaugoti vartotojus, kurie pasitiki programos paslaugomis, turite žinoti atsakymus į šiuos klausimus:

  1. Kas nori mus pulti?
  2. Kaip jie gali mus užpulti?
  3. Kaip galime juos sustabdyti?

Kas nori mus pulti?

Atsakymas į pirmąjį klausimą labai paprastas: viskas ir viskas. Taip, visa visata nori jus išmokyti. Vaikas su įsibėgėjusiu kompiuteriu, kuriame veikia Kali Linux? Jis tikriausiai jau tave užpuolė. Įtartinas vyras, mėgstantis kibti į ratus? Tikriausiai jis jau pasamdė ką nors, kad tave užpultų. Patikima REST API, per kurią kas valandą gaunate duomenis? Į jį tikriausiai buvo įsilaužta prieš mėnesį, kad būtų pateikti užkrėsti duomenys. Net aš galiu tave užpulti! Taigi jūs neturite aklai tikėti šia knyga. Pagalvokite, kad aš meluoju. Ir susirask programuotoją, kuris nuves mane prie švaraus vandens ir atskleis mano blogus patarimus. Kita vertus, galbūt jis ketina ir jus nulaužti...

Šios paranojos prasmė yra palengvinti mintyse suskirstyti viską, kas sąveikauja su jūsų žiniatinklio programa („Vartotojas“, „Įsilaužėlis“, „Duomenų bazė“, „Nepatikima įvestis“, „Valdytojas“, „REST API“), ir tada priskirti. kiekvienos kategorijos pasitikėjimo indeksas. Akivaizdu, kad „hakeriu“ negalima pasitikėti, bet kaip su „duomenų baze“? „Nesaugus įvestis“ gavo savo pavadinimą ne be priežasties, bet ar tikrai išfiltruotumėte tinklaraščio įrašą iš patikimo kolegos „Atom“ kanalo?

Tie, kurie rimtai nusiteikę įsilaužti į žiniatinklio programas, išmoksta pasinaudoti šiuo mąstymu, dažniau užpuldami ne pažeidžiamus duomenų šaltinius, o patikimus, kurių apsauga yra mažesnė. Tai nėra atsitiktinis sprendimas: in Tikras gyvenimas tiriamieji, turintys didesnį pasitikėjimo indeksą, yra mažiau įtartini. Būtent į šiuos duomenų šaltinius pirmiausia kreipiu dėmesį analizuodamas programą.

Grįžkime prie „Duomenų bazių“. Darant prielaidą, kad įsilaužėlis gali gauti prieigą prie duomenų bazės (o mes, paranojiški žmonės, visada manome, kad tai), tada juo niekada negalima pasitikėti. Dauguma programų pasitiki duomenų bazėmis be jokių klausimų. Iš išorės žiniatinklio programa atrodo kaip viena visuma, tačiau jos viduje yra atskirų komponentų, kurie keičiasi duomenimis, sistema. Jei manysime, kad visi šie komponentai yra patikimi, tada, jei vienas iš jų bus nulaužtas, visi kiti greitai bus pažeisti. Tokios katastrofiškos saugumo problemos negali būti išspręstos fraze „Jei į bazę įsilaužta, tai vis tiek pralaimime“. Galite taip sakyti, bet visai ne faktas, kad turėsite tai padaryti, jei iš pradžių nepasitikite baze ir elgsitės atitinkamai!

Kaip jie gali mus užpulti?

Atsakymas į antrąjį klausimą yra gana platus. Galite būti užpultas bet kur, iš kur kiekvienas jūsų žiniatinklio programos komponentas ar sluoksnis gauna duomenis. Iš esmės žiniatinklio programos tiesiog apdoroja duomenis ir perkelia juos iš vienos vietos į kitą. Vartotojų užklausos, duomenų bazės, API, tinklaraščių tiekimas, formos, slapukai, saugyklos, PHP aplinkos kintamieji, konfigūracijos failai, dar kartą konfigūracijos failai, netgi jūsų vykdomi PHP failai – visi jie gali būti užkrėsti duomenimis, kad pažeistų saugumą ir padarytų žalą. . Tiesą sakant, jei kenkėjiškų duomenų nėra aiškiai pateikta užklausai naudojamame PHP kode, tikėtina, kad jie bus „naudinga apkrova“. Daroma prielaida, kad a) parašėte PHP šaltinio kodą, b) jis buvo tinkamai peržiūrėtas ir c) jums nesumokėjo nusikalstamų organizacijų atstovai.

Jei naudojate duomenų šaltinius nepatikrindami, kad duomenys yra visiškai saugūs ir tinkami naudoti, galite būti pasirengę atakai. Taip pat turite patikrinti, ar gauti duomenys atitinka jūsų siunčiamus duomenis. Jei duomenys nėra visiškai saugūs atsiimti, taip pat turėsite rimtų problemų. Visa tai galima išreikšti kaip PHP taisyklę „Check input; ekranuoti išvestį.

Tai akivaizdūs duomenų šaltiniai, kuriuos turime kažkaip kontroliuoti. Šaltiniai taip pat gali apimti kliento saugyklas. Pavyzdžiui, dauguma programų atpažįsta vartotojus, priskirdamos jiems unikalius seanso ID, kurie gali būti saugomi slapukuose. Jei užpuolikas gauna vertę iš slapuko, jis gali apsimesti kitu vartotoju. Ir nors galime sumažinti kai kurias rizikas, susijusias su vartotojo duomenų perėmimu ar klastojimu, negalime garantuoti fizinio vartotojo kompiuterio saugumo. Mes net negalime garantuoti, kad vartotojai ras „123456“ patį kvailiausią slaptažodį po „slaptažodžio“. Papildomo pikantiškumo prideda ir tai, kad šiandien slapukai nėra vienintelė saugyklos rūšis vartotojo pusėje.

Kita dažnai nepastebima rizika yra šaltinio kodo vientisumas. PHP vis labiau populiarėja kurti programas, pagrįstas didelis skaičius laisvai susietos bibliotekos, moduliai ir pagrindų paketai. Daugelis jų atsisiunčiami iš viešųjų saugyklų, pvz., „Github“, ir įdiegiami naudojant paketų diegimo programas, tokias kaip „Composer“ ir jos žiniatinklio kompanioną Packagist.org. Todėl šaltinio kodo saugumas visiškai priklauso nuo visų šių trečiųjų šalių paslaugų ir komponentų saugumo. Jei „Github“ yra pažeistas, greičiausiai jis bus naudojamas kodui platinti su kenkėjišku priedu. Jei Packagist.org – tai užpuolikas galės nukreipti paketų užklausas į savo, kenkėjiškus paketus.

Composer ir Packagist.org šiuo metu susiduria su žinomomis priklausomybės aptikimo ir paketų platinimo pažeidžiamumu, todėl visada dar kartą patikrinkite viską, kas yra gamyboje, ir patikrinkite visų paketų šaltinį naudodami Packagist.org.

Kaip galime juos sustabdyti?

Įsilaužti į žiniatinklio programos saugumą gali būti ir juokingai paprasta, ir labai daug laiko. Teisinga manyti, kad kiekviena žiniatinklio programa kažkur turi pažeidžiamumą. Priežastis paprasta: visas programas kuria žmonės, o žmonės linkę klysti. Taigi tobulas saugumas yra svajonė. Visose programose gali būti pažeidžiamumų, o programuotojų užduotis yra sumažinti riziką.

Turėsite gerai pagalvoti, kad sumažintumėte žalos dėl žiniatinklio programos atakos tikimybę. Pasakojimo eigoje kalbėsiu apie galimus puolimo būdus. Kai kurie iš jų yra akivaizdūs, kiti ne. Tačiau bet kuriuo atveju, norint išspręsti problemą, būtina atsižvelgti į kai kuriuos pagrindinius saugos principus.

Pagrindiniai saugos principai

Kuriant apsaugines priemones, jų veiksmingumą galima įvertinti remiantis toliau nurodytais svarstymais. Kai kuriuos jau pateikiau aukščiau.
  1. Nepasitikėk niekuo ir niekuo.
  2. Visada remkitės blogiausiu scenarijumi.
  3. Taikykite gynybą nuodugniai.
  4. Laikykitės „Keep It Simple Stupid“ (KISS) principo.
  5. Laikykitės „mažiausios privilegijos“ principo.
  6. Užpuolikai jaučia dviprasmiškumą.
  7. Skaitykite dokumentaciją (RTFM), bet niekada ja nepasitikėkite.
  8. Jei tai nebuvo išbandyta, tai neveikia.
  9. Tai visada tavo kaltė!
Trumpai apžvelgsime visus dalykus.

1. Nepasitikėk niekuo ir niekuo

Kaip minėta pirmiau, teisinga yra manyti, kad visi ir viskas, su kuo sąveikauja jūsų žiniatinklio programa, nori ją nulaužti. Įskaitant kitus programos komponentus ar sluoksnius, reikalingus užklausoms apdoroti. Viskas ir viskas. Be išimčių.

2. Visada manykite blogiausią scenarijų

Daugelis apsaugos sistemų turi vieną bendrą bruožą: nesvarbu, kaip gerai pagaminta, kiekviena gali būti pažeista. Jei į tai atsižvelgsite, greitai suprasite antrojo punkto pranašumą. Blogiausias scenarijus padės įvertinti priepuolio mastą ir sunkumą. O jei taip atsitiks, galbūt galėsite sušvelninti nemalonias pasekmes naudodami papildomas apsaugos priemones ir architektūrinius pakeitimus. Galbūt jūsų naudojamas tradicinis sprendimas jau pakeistas geresniu?

3. Taikykite gynybą nuodugniai

Daugiapakopė apsauga yra pasiskolinta iš karo mokslo, nes žmonės jau seniai suprato, kad daugybė sienų, smėlio maišų, įrangos, šarvų ir kolbų, dengiančių gyvybiškai svarbius organus nuo priešo kulkų ir ašmenų, yra teisingas požiūris į saugumą. Niekada nežinote, kuris iš šių neapsaugos, ir turite įsitikinti, kad keli apsaugos lygiai leidžia pasikliauti daugiau nei vienu lauko įtvirtinimu ar mūšio rikiuote. Žinoma, tai ne tik pavienių atmetimų reikalas. Įsivaizduokite užpuoliką, kuris užlipo ant milžiniškos viduramžių sienos laiptais ir pamatė, kad už jos yra kita siena, iš kurios jį apipylė strėlės. Įsilaužėliai jausis taip pat.

4. Keep It Simple Stupid (KISS)

Geriausios priemonės visada yra paprastos. Juos lengva kurti, įgyvendinti, suprasti, naudoti ir išbandyti. Paprastumas sumažina klaidų, skatina teisingas darbas programas ir palengvina įgyvendinimą net sudėtingiausioje ir nedraugiškiausioje aplinkoje.

5. Laikykitės „mažiausios privilegijos“ principo

Kiekvienas informacijos mainų dalyvis (vartotojas, procesas, programa) turėtų turėti tik tas prieigos teises, kurių reikia jo funkcijoms atlikti.

6. Užpuolikai jaučia dviprasmiškumą

„Saugumas per nežinomybę“ remiasi prielaida, kad jei naudojate gynybą A ir niekam nesakysite, kas tai yra, kaip ji veikia arba ar ji apskritai egzistuoja, tai stebuklingai jums padeda, nes užpuolikai patiria nuostolių. Tiesą sakant, tai suteikia tik nedidelį pranašumą. Dažnai įgudęs užpuolikas gali suprasti, kokius veiksmus atliekate, todėl turite naudoti ir aiškią gynybą. Tie, kurie yra pernelyg įsitikinę, kad neaiški apsauga panaikina tikrosios apsaugos poreikį, turėtų būti specialiai nubausti, kad atsikratytų iliuzijų.

7. Perskaitykite dokumentaciją (RTFM), bet niekada ja nepasitikėkite

PHP vadovas yra Biblija. Žinoma, ją parašė ne „Skraidantis spagečių pabaisa“, todėl formaliai jame gali būti tam tikra dalis pustiesių, ydų, klaidingų interpretacijų ar klaidų, kurios dar nebuvo pastebėtos ar ištaisytos. Tas pats pasakytina apie Stack Overflow.

Specializuoti saugumo išminties šaltiniai (specifiniai ir ne PHP orientuoti) paprastai suteikia išsamesnių žinių. Arčiausiai PHP saugos biblijos yra OWASP svetainė, kurioje yra straipsnių, vadovėlių ir patarimų. Jei nerekomenduojate kažko daryti naudojant OWASP – niekada to nedarykite!

8. Jei tai nebuvo išbandyta, tai neveikia.

Diegdami apsaugą, turite parašyti visus testus, kuriuos reikia patvirtinti. Tai apima apsimetimą įsilaužėliu, dėl kurio verkia kalėjimas. Tai gali skambėti nerealiai, tačiau žiniatinklio programų įsilaužimo technikos išmanymas yra gera praktika; sužinosite apie galimus pažeidžiamumus ir jūsų paranoja sustiprės. Tačiau vadovybei nebūtina pasakoti apie naujai įgytą padėką už įsilaužimą į žiniatinklio programą. Būtinai naudokite automatinius įrankius pažeidžiamumui nustatyti. Jie yra naudingi, tačiau, žinoma, jie nepakeičia kokybės kodų peržiūros ar net rankinio programų testavimo. Kuo daugiau išteklių išleisite testavimui, tuo patikimesnė bus jūsų programa.

9. Visada kaltas tu!

Programuotojai įpratę manyti, kad saugumo spragos bus randamos kaip pavienės atakos, kurių pasekmės bus nereikšmingos.

Pavyzdžiui, duomenų nutekėjimas (gerai dokumentuota ir plačiai paplitusi įsilaužimo forma) dažnai vertinami kaip nedidelės saugumo problemos, nes jie neturi tiesioginės įtakos vartotojams. Tačiau informacijos apie programinės įrangos versijas, kūrimo kalbas, šaltinio kodo vietą, taikomųjų programų ir verslo logiką, duomenų bazės struktūrą ir kitus žiniatinklio programų aplinkos bei vidinių operacijų aspektus nutekėjimas dažnai yra svarbus sėkmingam atakai.

Tuo pačiu metu atakos prieš apsaugos sistemas dažnai yra atakų derinys. Atskirai jie mažai vertingi, bet kartu kartais atveria kelią kitoms atakoms. Pavyzdžiui, SQL injekcijai kartais reikia konkretaus vartotojo vardo, kurį galima gauti naudojant Timing Attack prieš administratoriaus sąsają, o ne daug brangesnės ir matomos žiaurios jėgos. Savo ruožtu SQL injekcija leidžia įgyvendinti XSS ataką konkrečioje administracinėje paskyroje, nepatraukiant dėmesio daugybe įtartinų įrašų žurnaluose.

Pavojus žiūrėti į pažeidžiamumą atskirai slypi nuvertinus jų grėsmę ir dėl to per daug neatsargiai. Programuotojai dažnai per tingūs ištaisyti pažeidžiamumą, nes mano, kad tai per daug nereikšminga. Taip pat praktikuojama atsakomybė už saugų kūrimą perkelti galutiniams programuotojams ar vartotojams, ir dažnai nedokumentuojant konkrečių problemų: net šių spragų buvimas nepripažįstamas.

Atrodo nereikšmingumas nėra svarbus. Versti programuotojus ar vartotojus taisyti jūsų spragas yra neatsakinga, ypač jei apie jas net neinformavote.

Įvesties patvirtinimas

Įvesties patvirtinimas yra išorinis jūsų žiniatinklio programos apsaugos perimetras. Jis apsaugo pagrindinę verslo logiką, duomenų apdorojimą ir išvesties generavimą. Žodžiu, viskas už šio perimetro, išskyrus dabartinės užklausos vykdomą kodą, yra laikoma priešo teritorija. Visus galimus perimetro įėjimus ir išėjimus dieną ir naktį saugo karingi sargybiniai, kurie iš pradžių šaudo, o paskui klausinėja. Prie perimetro pritvirtinti atskirai saugomi (ir labai įtartinai atrodantys) „sąjungininkai“, įskaitant „Modelis“, „Duomenų bazė“ ir „Failų sistema“. Niekas nenori į juos šaudyti, bet jei jie bandys suvilioti likimą... trenk. Kiekvienas sąjungininkas turi savo perimetrą, kuris gali pasitikėti mūsiškiu arba nepasitikėti.

Prisiminkite mano žodžius apie tai, kuo galite pasitikėti? Niekas ir nieko. PHP pasaulyje visur patariama nepasitikėti „vartotojo įvestimi“. Tai viena iš kategorijų pagal pasitikėjimo laipsnį. Darant prielaidą, kad vartotojais negalima pasitikėti, manome, kad visa kita galima pasitikėti. Tai netiesa. Vartotojai yra akivaizdžiausias nepatikimas įvesties šaltinis, nes mes jų nepažįstame ir negalime jų valdyti.

Bandymo kriterijai

Įvesties patvirtinimas yra akivaizdžiausia ir silpniausia žiniatinklio programos apsauga. Didžioji dauguma pažeidžiamumų atsiranda dėl gedimų tikrinimo sistemoje, todėl labai svarbu, kad ši apsaugos dalis veiktų tinkamai. Jai gali nepavykti, bet vis tiek laikykitės šių svarstymų. Diegdami pasirinktinius tikrintuvus ir naudodami trečiųjų šalių patvirtinimo bibliotekas visada atminkite, kad trečiųjų šalių sprendimai dažniausiai atlieka įprastas užduotis ir praleidžia pagrindines patvirtinimo procedūras, kurių gali prireikti jūsų programai. Naudodami bet kokias saugos poreikiams skirtas bibliotekas būtinai savarankiškai patikrinkite, ar jose nėra pažeidžiamumų ir ar tinkamai veikia. Taip pat rekomenduoju prisiminti, kad PHP gali rodyti keistą ir galbūt nesaugų elgesį. Pažvelkite į šį pavyzdį, paimtą iš filtravimo funkcijų:

Filter_var ("php: //example.org", FILTER_VALIDATE_URL);
Filtras perduodamas be jokių klausimų. Problema ta, kad priimtas php: // URL gali būti perduotas PHP funkcijai, kuri tikisi gauti nuotolinį HTTP adresą, o ne grąžinti duomenis iš vykdomojo PHP scenarijaus (per PHP tvarkyklę). Pažeidžiamumas atsiranda dėl to, kad filtro parinktis neturi metodo, leidžiančio apriboti galiojančius URI. Net jei programa tikisi http, https arba mailto nuorodų, o ne tam tikro PHP URI. Būtina vengti šio pernelyg bendro požiūrio į patikrinimą.

Būkite atsargūs su kontekstu

Įvesties patvirtinimas turėtų užkirsti kelią nesaugiems duomenims patekti į žiniatinklio programą. Rimtas kliūtis: duomenų saugumo patikrinimai dažniausiai atliekami tik pirmą kartą pagal paskirtį.

Tarkime, gavau duomenis su vardu. Galiu lengvai patikrinti, ar jame nėra apostrofų, brūkšnelių, skliaustų, tarpų ir daugybės unikodo raidinių ir skaitmeninių simbolių. Pavadinimas yra galiojantys duomenys, kuriuos galima naudoti rodant (pirmasis numatytas naudojimas). Bet jei jį naudosite kur nors kitur (pavyzdžiui, užklausoje į duomenų bazę), tada jis bus rodomas naujame kontekste. Kai kurie pavadinime leidžiami simboliai yra pavojingi šiame kontekste: jei pavadinimas konvertuojamas į eilutę, kad būtų atlikta SQL injekcija.

Pasirodo, įvesties patvirtinimas iš esmės yra nepatikimas. Tai veiksmingiausia iškirpti vienareikšmiškai neteisingas reikšmes. Tarkime, kai kažkas turi būti sveikasis skaičius, raidinė ir skaitmeninė eilutė arba HTTP URL. Tokie formatai ir reikšmės turi savo apribojimų ir, tinkamai patikrinus, mažiau gali kelti grėsmę. Kitas reikšmes (neribotą tekstą, GET / POST masyvus ir HTML) patikrinti sunkiau ir jose dažniau yra kenkėjiškų duomenų.

Kadangi didžiąją laiko dalį mūsų programa perduos duomenis tarp kontekstų, negalime tiesiog patikrinti visų įvesties duomenų ir laikyti, kad byla baigta. Įvesties patikrinimas yra tik pirmoji apsaugos grandinė, bet jokiu būdu ne vienintelė.

Kartu su įvesties duomenų patvirtinimu labai dažnai naudojamas apsaugos būdas, pvz., pabėgimas. Su jo pagalba duomenys yra tikrinami dėl saugumo įvedant kiekvieną naują kontekstą. Paprastai šis metodas naudojamas apsisaugoti nuo scenarijų tarp svetainių (XSS), tačiau jis taip pat reikalingas atliekant daugelį kitų užduočių, kaip filtravimo įrankis.

Pabėgimas apsaugo nuo klaidingo siunčiamų duomenų gavėjo interpretacijos. Tačiau to neužtenka – duomenims patekus į naują kontekstą, reikia patikrinti būtent konkrečiam kontekstui.

Nors tai gali būti suvokiama kaip pradinės įvesties patvirtinimo dubliavimas, iš tikrųjų papildomi patvirtinimo veiksmai yra geriau pritaikyti dabartiniam kontekstui, kai duomenų reikalavimai labai skiriasi. Pavyzdžiui, iš formos gaunamuose duomenyse gali būti nurodyta procentinė dalis. Pirmą kartą naudojant patikriname, ar vertė tikrai yra sveikasis skaičius. Tačiau perkeliant mūsų taikomąją programą į modelį, gali iškilti nauji reikalavimai: reikšmė turi tilpti į tam tikrą diapazoną, kuris yra būtinas, kad programos verslo logika veiktų. Ir jei šis papildomas patikrinimas nebus atliktas naujame kontekste, gali kilti rimtų problemų.

Naudokite tik baltąjį sąrašą, o ne juodąjį sąrašą

Juodieji ir baltieji sąrašai yra du pagrindiniai įvesties patvirtinimo būdai. Juoda reiškia tikrinti, ar nėra neteisingų duomenų, o balta – tikrinti, ar nėra tinkamų duomenų. Pageidautina įtraukti į baltąjį sąrašą, nes tikrinant perduodami tik tie duomenys, kurių tikimės. Savo ruožtu juoduosiuose sąrašuose atsižvelgiama tik į programuotojų prielaidas apie visus galimus klaidingus duomenis, todėl daug lengviau susipainioti, ką nors praleisti ar suklysti.

Geras pavyzdys yra bet kokia patvirtinimo rutina, sukurta siekiant užtikrinti, kad HTML būtų saugus, kai šablone pateikiama išvestis be išėjimo. Jei naudojame juodąjį sąrašą, turime patikrinti, ar HTML nėra pavojingų elementų, atributų, stilių ir vykdomojo JavaScript. Tai daug darbo, o juodajame sąraše esantys HTML valikliai visada sugeba nepaisyti pavojingų kodų derinių. Įtraukimo į baltąjį sąrašą įrankiai pašalina šią dviprasmybę, nes leidžia tik žinomus leidžiamus elementus ir atributus. Visi kiti bus tiesiog atskirti, izoliuoti arba pašalinti, kad ir kokie jie būtų.

Taigi, bet kuriai patvirtinimo procedūrai pirmenybė teikiama įtraukimui į baltąjį sąrašą dėl didesnio saugumo ir patikimumo.

Niekada nebandykite taisyti įvesties

Įvesties patvirtinimas dažnai lydimas filtravimo. Jei tikrindami tiesiog įvertiname duomenų teisingumą (išduodami teigiamą arba neigiamą rezultatą), tai filtravimas pakeičia patikrintus duomenis taip, kad jie atitiktų konkrečias taisykles.

Tai paprastai yra šiek tiek žalinga. Tradiciniai filtrai apima, pavyzdžiui, visų simbolių, išskyrus skaičius (įskaitant papildomus skliaustus ir brūkšnelius) pašalinimą iš telefono numerių arba nereikalingos horizontalios ar vertikalios vietos apkarpymą. Tokiose situacijose atliekamas minimalus valymas, kad būtų išvengta rodymo ar perdavimo klaidų. Tačiau galite per daug apsidžiaugti naudodami filtravimą, kad blokuotumėte kenkėjiškus duomenis.

Viena iš bandymo taisyti įvesties duomenis pasekmių yra ta, kad užpuolikas gali numatyti jūsų pataisymų poveikį. Tarkime, kad yra neteisinga eilutės reikšmė. Ieškote, ištrinate ir baigiate filtravimą. Ką daryti, jei užpuolikas sukuria eilutėmis atskirtą reikšmę, kad aplenktų jūsų filtrą?

ipt>alert(document.cookie);ipt>
В этом примере простая фильтрация по тэгу ничего не даст: удаление явного тэга

Ankstesnis straipsnis: Kitas straipsnis:


© 2015 m .
Apie svetainę | Kontaktai
| svetainės žemėlapį