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ą.
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.
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ė“.
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...
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?
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:
Š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!
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.
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.
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!
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.
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.
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ą.
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ų.
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.
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ą?
В этом примере простая фильтрация по тэгу ничего не даст: удаление явного тэга
Ankstesnis straipsnis: Ką virti iš sedula: uogienę, kompotą, želė, uogienę, likerį
Kitas straipsnis: Greitas kepalo pyragas: receptai su sūriu ir saldžiu įdaru