Tere. Minu nimi on Sasha Barannik. Mail.Ru Groupis juhin veebiarendusosakonda, mis koosneb 15 töötajast. Oleme õppinud, kuidas luua saite kümnete miljonite kasutajate jaoks ja saame hõlpsalt hakkama mitme miljoni igapäevase vaatajaskonnaga. Olen ise veebiarendusega tegelenud ca 20 aastat ja viimased 15 tööaastat on programmeerimine olnud valdavalt PHP-s. Kuigi keele võimalused ja lähenemine arendusele on selle aja jooksul palju muutunud, jääb peamiste haavatavuste mõistmine ja nende eest kaitsmise oskus iga arendaja jaoks võtmeoskusteks.
Internetis on turvalisuse kohta palju artikleid ja juhendeid. See raamat tundus mulle üsna üksikasjalik, kuid samas sisutihe ja arusaadav. Loodan, et see aitab teil õppida midagi uut ning muuta teie saidid turvalisemaks ja usaldusväärsemaks.
P.S. Raamat on pikk, nii et tõlge jagatakse mitmes artiklis. Nii et alustame...
Veel üks raamat PHP turvalisuse kohta? PHP turvaraamatu käivitamiseks on palju võimalusi. Kahjuks ei lugenud ma ühtegi neist läbi, seega pean sellega kirjutamise käigus tegelema. Võib-olla alustan kõige elementaarsemast ja loodan, et kõik saab korda.Kui arvestada ettevõtte X poolt veebis käivitatud abstraktset veebirakendust, võime eeldada, et see sisaldab mitmeid komponente, mille sissemurdmine võib põhjustada olulist kahju. Mida näiteks?
Kahjuks lahenevad turvaprobleemid sageli tagantjärele. Arvatakse, et kõige olulisem on luua töötav, kasutajate vajadustele vastav rakendus, millel on vastuvõetav eelarve ja ajavahemik. See on arusaadav prioriteetide kogum, kuid te ei saa turvalisust igavesti ignoreerida. Palju parem on seda alati meeles pidada, rakendades arenduse käigus konkreetseid otsuseid, kui muudatuste maksumus on madal.
Sekundaarne turvalisus on suuresti programmeerimiskultuuri tulemus. Mõned programmeerijad löövad haavatavusest mõeldes külma higi välja, samas kui teised võivad haavatavuse olemasolu vaidlustada, kuni suudavad tõestada, et see pole üldse haavatavus. Nende kahe äärmuse vahel on palju programmeerijaid, kes kehitavad lihtsalt õlgu, sest nad pole veel valesti läinud. Seda kummalist maailma on neil raske mõista.
Kuna veebirakenduse turvasüsteem peab kaitsma kasutajaid, kes usaldavad rakenduse teenuseid, siis on vaja teada vastuseid küsimustele:
Selle paranoia mõte on hõlbustada kõigi teie veebirakendusega suhtlevate asjade (kasutaja, häkker, andmebaas, ebausaldusväärne sisend, haldur, REST API) vaimset kategoriseerimist ja seejärel määrata igale kategooriale usaldusindeks. Ilmselgelt ei saa "häkkerit" usaldada, aga kuidas on lood "andmebaasi"? "Ebausaldusväärne sisend" sai oma nime põhjusel, kuid kas tõesti filtreeriksite ajaveebipostituse kolleegi usaldusväärsest Atomi voost?
Need, kes soovivad veebirakenduste häkkimist tõsiselt, õpivad seda mõtteviisi ära kasutama, rünnates sagedamini mitte haavatavaid andmeallikaid, vaid usaldusväärseid andmeallikaid, millel on vähem tõenäoline, et neil on hea kaitsesüsteem. See pole juhuslik otsus: päriselus äratavad kõrgema usaldusindeksiga katsealused vähem kahtlust. Just nendele andmeallikatele pööran rakendust analüüsides eelkõige tähelepanu.
Tuleme tagasi andmebaaside juurde. Eeldades, et häkker pääseb andmebaasile juurde (ja meie, paranoikud, eeldame alati), ei saa seda kunagi usaldada. Enamik rakendusi usaldab andmebaase kahtlemata. Väljastpoolt näeb veebirakendus välja ühtse entiteedina, kuid sees on eraldi komponentide süsteem, mis vahetab andmeid. Kui me peame kõiki neid komponente usaldusväärseks, siis kui ühte neist häkitakse, satuvad kõik teised kiiresti ohtu. Selliseid katastroofilisi turvaprobleeme ei saa lahendada lausega "Kui baasi häkitakse, siis me ikkagi kaotasime." Võite nii öelda, kuid see pole sugugi tõsi, et peate seda tegema, kui te algselt baasi ei usalda ja tegutsete vastavalt!
Kuidas nad saavad meid rünnata? Vastus teisele küsimusele on üsna ulatuslik. Teid võib rünnata kõikjalt, kus veebirakenduse iga komponent või kiht saab oma andmeid. Sisuliselt töötlevad veebirakendused lihtsalt andmeid ja liigutavad neid ühest kohast teise. Kasutajapäringud, andmebaasid, API-d, ajaveebikanalid, vormid, küpsised, hoidlad, PHP keskkonnamuutujad, konfiguratsioonifailid, uuesti konfiguratsioonifailid, isegi teie käivitatavad PHP-failid – kõik need võivad olla nakatunud turvarikkumiste andmete ja kahjustustega. Tegelikult, kui pahatahtlikud andmed päringu jaoks kasutatud PHP-koodis selgesõnaliselt puuduvad, tulevad need tõenäoliselt "kasuliku koormana". See eeldab, et a) kirjutasite PHP lähtekoodi, b) see vaadati korralikult läbi ja c) teile ei makstud kuritegelikud organisatsioonid.Kui kasutate andmeallikaid ilma, et kontrolliksite, kas andmed on täiesti ohutud ja kasutuskõlblikud, siis olete potentsiaalselt avatud rünnakutele. Samuti peate kontrollima, kas saadud andmed ühtivad teie saadetud andmetega. Kui andmed ei ole väljavõtmiseks täiesti ohutud, on teil ka tõsiseid probleeme. Seda kõike saab väljendada PHP reeglina “Validate input; pääse väljundist."
Need on ilmsed andmeallikad, mida peame kuidagi kontrollima. Allikad võivad hõlmata ka kliendipoolseid hoidlaid. Näiteks tunnevad enamik rakendusi kasutajad ära, määrates neile kordumatud seansi ID-d, mida saab salvestada küpsistesse. Kui ründaja saab küpsisest väärtuse, võib ta esineda teise kasutajana. Kuigi me saame maandada mõningaid kasutajaandmete pealtkuulamise või muutmisega seotud riske, ei saa me tagada kasutaja arvuti füüsilist turvalisust. Me ei saa isegi garanteerida, et kasutajad leiavad, et "123456" on "parooli" järel kõige rumalam parool. Vürtsi lisab asjaolu, et tänapäeval pole küpsised ainus kasutajapoolne salvestustüüp.
Teine sageli tähelepanuta jäetud risk puudutab teie lähtekoodi terviklikkust. PHP-s on muutumas üha populaarsemaks rakenduste arendamine, mis põhinevad suurel hulgal lõdvalt seotud teekidel, moodulitel ja raamistike pakettidel. Paljud neist laaditakse alla avalikest hoidlatest (nt Github), mis on installitud paketiinstalleritega, nagu Composer ja selle veebikaaslane Packagist.org. Seetõttu sõltub lähtekoodi turvalisus täielikult kõigi nende kolmandate osapoolte teenuste ja komponentide turvalisusest. Kui Github on ohustatud, kasutatakse seda tõenäoliselt pahatahtliku lisandiga koodi levitamiseks. Kui Packagist.org – siis saab ründaja paketipäringud ümber suunata enda pahatahtlikesse pakettidesse.
Praegu mõjutavad Composerit ja Packagist.org-i teadaolevad haavatavused pakettide sõltuvuse tuvastamisel ja levitamisel, seega kontrollige alati kõike oma tootmiskeskkonnas ja kontrollige saidiga Packagist.org kõigi pakettide allikat.
Kuidas me saame neid peatada? Veebirakenduse turvalisuse murdmine võib olla nii naeruväärselt lihtne kui ka aeganõudev. On õiglane eeldada, et igal veebirakendusel on kuskil haavatavus. Põhjus on lihtne: kõik rakendused on tehtud inimeste poolt ja inimesed teevad vigu. Nii et täiuslik turvalisus on unistus. Kõik rakendused võivad sisaldada turvaauke ja programmeerijate ülesanne on riske minimeerida.Peate hoolikalt mõtlema, et vähendada veebirakenduse rünnakust tuleneva kahju tõenäosust. Loo käigus räägin võimalikest ründemeetoditest. Mõned neist on ilmsed, teised mitte. Kuid igal juhul on probleemi lahendamiseks vaja arvestada mõningate turvalisuse põhiprintsiipidega.
Turvalisuse põhiprintsiibid Turvameetmete kavandamisel saab nende tõhusust hinnata järgmiste kaalutluste põhjal. Mõnda olen juba eespool maininud.Spetsiaalsed turvatarkuste allikad (keskendunud PHP-le ja kaugemale) annavad üldiselt üksikasjalikumaid teadmisi. PHP turvapiiblile kõige lähemal on OWASP, mis sisaldab artikleid, õpetusi ja näpunäiteid. Kui OWASP-is midagi heidutab, ärge kunagi tehke seda!
8. Kui seda ei ole testitud, siis see ei tööta Kaitsete rakendamisel peate kirjutama kõik vajalikud testid, et kontrollida nende toimimist. Sealhulgas teeskle, et oled häkker, kelle pärast vangla nutab. See võib tunduda kaugeleulatuv, kuid veebirakenduste häkkimise tehnikate tundmine on hea tava; saate teada võimalikest haavatavustest ja teie paranoia suureneb. Samas ei pea juhtkonnale rääkima äsja omandatud tänutundest veebirakenduse häkkimise eest. Kasutage turvaaukude tuvastamiseks kindlasti automatiseeritud tööriistu. Need on kasulikud, kuid loomulikult ei asenda need kvaliteedikoodide ülevaatamist ega isegi rakenduse käsitsi testimist. Mida rohkem ressursse testimisele kulutate, seda usaldusväärsem on teie rakendus.9. See on alati sinu süü! Programmeerijad on harjunud uskuma, et turvanõrkused leitakse hajutatud rünnakutena ja nende tagajärjed on tühised.Näiteks peetakse andmetega seotud rikkumisi (hästi dokumenteeritud ja laialt levinud häkkimise tüüp) sageli väikesteks turvaprobleemideks, kuna need ei mõjuta kasutajaid otseselt. Siiski on edukaks rünnakuks sageli hädavajalik info lekkimine tarkvaraversioonide, arenduskeelte, lähtekoodi asukohtade, rakenduste loogika ja äriloogika, andmebaasi struktuuri ning muude veebirakenduste keskkonna ja sisemiste toimingute aspektide kohta.
Samas on turvasüsteemide rünnakud sageli rünnakute kombinatsioonid. Üksiti on need tähtsusetud, kuid samas avavad mõnikord tee ka teistele rünnakutele. Näiteks SQL-i süstimiseks on mõnikord vaja konkreetset kasutajanime, mille saab hankida Timing Attacki abil administratiivse liidese vastu, mitte palju kallima ja märgatavama toore jõu asemel. SQL-i süstimine võimaldab omakorda rakendada XSS-i rünnakut konkreetsele administraatorikontole, ilma et see juhiks tähelepanu suurele hulgale kahtlastele logikirjetele.
Haavatavust eraldi vaadeldes seisneb oht nende ohu alahindamises ja seetõttu liiga hoolimatus kohtlemises. Programmeerijad on sageli liiga laisad, et haavatavust parandada, kuna peavad seda liiga väikeseks. Samuti harjutatakse vastutust turvalise arenduse eest nihutama lõppprogrammeerijatele või kasutajatele ja sageli ilma konkreetseid probleeme dokumenteerimata: isegi nende turvaaukude olemasolu ei tunnistata.
Näiline tähtsusetus pole oluline. On vastutustundetu sundida programmeerijaid või kasutajaid oma turvaauke parandama, eriti kui te neist isegi ei teavitanud.
Sisestuse valideerimine Sisendvalideerimine on teie veebirakenduse kaitseväli. See kaitseb põhilist äriloogikat, andmetöötlust ja väljundi genereerimist. Sõna otseses mõttes peetakse vaenlase territooriumiks kõike, mis jääb sellest perimeetrist välja, välja arvatud praeguse päringu poolt täidetav kood. Kõiki võimalikke perimeetri sisse- ja väljapääsusid valvavad päeval ja öösel sõjakad vahimehed, kes tulistavad esimesena ja esitavad küsimusi hiljem. Perimeetriga on ühendatud eraldi valvatavad (ja väga kahtlase välimusega) "liitlased", sealhulgas "mudel", "andmebaas" ja "failisüsteem". Keegi ei taha neid tulistada, aga kui nad õnne proovivad... paugu. Igal liitlasel on oma perimeeter, mis võib meie oma usaldada või mitte.Kas mäletate mu sõnu selle kohta, keda saate usaldada? Mitte keegi ja mitte midagi. PHP-maailmas soovitatakse kõikjal mitte usaldada "kasutaja sisendit". See on üks kategooriatest vastavalt usalduse määrale. Eeldades, et kasutajaid ei saa usaldada, arvame, et kõike muud saab usaldada. See on vale. Kasutajad on kõige ilmsem ebausaldusväärne sisendallikas, sest me ei tunne neid ega saa neid kontrollida.
Valideerimiskriteeriumid Sisestuse valideerimine on nii kõige ilmsem kui ka kõige ebausaldusväärsem veebirakenduse kaitse. Valdav osa haavatavustest on tingitud verifitseerimissüsteemi tõrgetest, mistõttu on väga oluline, et see kaitse osa õigesti töötaks. See võib ebaõnnestuda, kuid järgige siiski järgmisi kaalutlusi. Kohandatud validaatorite juurutamisel ja kolmandate osapoolte valideerimisteeke kasutades pidage alati meeles, et kolmanda osapoole lahendused kalduvad täitma tavalisi ülesandeid ja jätavad välja võtmete valideerimisrutiinid, mida teie rakendus võib vajada. Kui kasutate turvavajadusteks loodud teeke, kontrollige kindlasti nende haavatavusi ja õiget toimimist. Samuti soovitan mitte unustada, et PHP võib ilmutada kummalist ja võib-olla ebaturvalist käitumist. Vaadake seda filtrifunktsioonidest võetud näidet:Filter_var("php://example.org", FILTER_VALIDATE_URL);
Filter töötab probleemideta. Probleem seisneb selles, et aktsepteeritud php:// URL-i saab edastada PHP-funktsioonile, mis loodab saada HTTP-kaugaadressi, selle asemel et tagastada andmeid täitvast PHP-skriptist (PHP-käsitleja kaudu). Haavatavus ilmneb seetõttu, et filtrivalikul pole meetodit, mis piiraks lubatud URI-sid. Kuigi rakendus ootab http, https või mailto linki, mitte mõnda PHP-spetsiifilist URI-d. Sellist liiga üldist lähenemist kontrollimisele tuleb igal juhul vältida.
Oletame, et sain nime sisaldavad andmed. Saan hõlpsalt kontrollida, kas sellel on apostroofid, sidekriipsud, sulgud, tühikud ja terve hulk tähtnumbrilisi Unicode'i märke. Nimetus on kehtivad andmed, mida saab kasutada kuvamiseks (esimene kasutusotstarve). Aga kui kasutada seda kuskil mujal (näiteks andmebaasi päringus), siis on see uues kontekstis. Ja mõned nimes lubatud märgid on selles kontekstis ohtlikud: kui nimi teisendatakse stringiks SQL-i süstimiseks.
Selgub, et sisendi valideerimine on oma olemuselt ebausaldusväärne. See on kõige tõhusam ühemõtteliselt kehtetute väärtuste kärpimiseks. Öelge, kui miski peab olema täisarv, tähtnumbriline string või HTTP URL. Sellistel vormingutel ja väärtustel on oma piirangud ja kui neid õigesti kontrollitakse, ei kujuta need endast ohtu. Muid väärtusi (piiramatu tekst, GET/POST massiivid ja HTML) on raskem kontrollida ja need sisaldavad tõenäolisemalt pahatahtlikke andmeid.
Kuna enamasti edastab meie rakendus andmeid kontekstide vahel, ei saa me lihtsalt kõiki sisendeid kontrollida ja tööd tehtuks lugeda. Sisseregistreerimine on vaid esimene kaitseahel, kuid mitte sugugi ainus.
Lisaks sisendandmete valideerimisele kasutatakse väga sageli kaitsemeetodit, näiteks põgenemist. Sellega kontrollitakse andmete turvalisust iga uue konteksti sisestamisel. Tavaliselt kasutatakse seda meetodit saidiülese skriptimise (XSS) eest kaitsmiseks, kuid see on filtreerimisvahendina nõutav ka paljudes muudes ülesannetes.
Põgenemine kaitseb väljaminevate andmete vastuvõtja eksliku tõlgendamise eest. Kuid sellest ei piisa – kuna andmed satuvad uude konteksti, on vaja kontrollida konkreetset konteksti.
Kuigi seda võib vaadelda esialgse sisendi valideerimise dubleerimisena, sobivad täiendavad valideerimisetapid tegelikult paremini praeguses kontekstis, kui andmenõuded on väga erinevad. Näiteks võivad vormilt saadavad andmed sisaldada protsenti. Selle esmakordsel kasutamisel kontrollime, kas väärtus on tõepoolest täisarv. Kuid selle ülekandmisel meie rakendusmudelile võivad tekkida uued nõuded: väärtus peab mahtuma teatud vahemikku, mis on rakenduse äriloogika toimimiseks kohustuslik. Ja kui seda lisakontrolli uues kontekstis ei tehta, võivad tekkida tõsised probleemid.
Kasutage ainult valgeid, mitte musti loendeid Mustad ja valged nimekirjad on kaks peamist sisendi kontrollimise meetodit. Must tähendab kehtetute andmete kontrollimist ja valge õigete andmete kontrollimist. Lubatud loendisse lisamine on eelistatav, kuna valideerimise käigus edastatakse ainult need andmed, mida ootame. Mustad nimekirjad võtavad omakorda arvesse ainult programmeerijate oletusi kõigi võimalike vigaste andmete kohta, nii et siin on palju lihtsam segadusse sattuda, millestki mööda vaadata või eksida.Hea näide on mis tahes valideerimisprotseduur, mis on loodud HTML-i turvaliseks muutmiseks mallis oleva vältimatu väljundi seisukohast. Kui kasutame musta nimekirja, siis peame kontrollima, et HTML ei sisaldaks ohtlikke elemente, atribuute, stiile ega käivitatavat JavaScripti. See on palju tööd ja musta nimekirja põhinevad HTML-i puhastajad suudavad alati ohtlikest koodikombinatsioonidest mööda vaadata. Ja valge nimekirja lisamise tööriistad kõrvaldavad selle ebaselguse, lubades ainult teadaolevaid lubatud elemente ja atribuute. Kõik teised lihtsalt eraldatakse, isoleeritakse või eemaldatakse, olenemata sellest, millised nad on.
Seega on suurema turvalisuse ja usaldusväärsuse tõttu kõigi kontrolliprotseduuride jaoks eelistatav valge nimekirja lisamine.
Ärge kunagi proovige sisendandmeid parandada Sisendandmete valideerimisega kaasneb sageli filtreerimine. Kui kontrolli käigus hindame lihtsalt andmete õigsust (positiivse või negatiivse tulemuse väljastamisega), siis filtreerimine muudab kontrollitavaid andmeid nii, et need vastavad kindlatele reeglitele.See on tavaliselt mõnevõrra kahjulik. Traditsioonilised filtrid hõlmavad näiteks kõigi märkide, välja arvatud numbrite, eemaldamist telefoninumbritest (kaasa arvatud täiendavad sulud ja sidekriipsud) või tarbetu horisontaalse või vertikaalse tühiku kärpimist. Sellistes olukordades tehakse kuvamis- või edastusvigade kõrvaldamiseks minimaalne puhastus. Siiski võite pahatahtlike andmete blokeerimiseks filtreerimise kasutamisest liialt kippuda.
Üks sisendi parandamise tagajärg on see, et ründaja saab ennustada teie paranduste mõju. Oletame, et stringi väärtus on vale. Otsite selle üles, kustutate selle ja lõpetate filtreerimise. Mis siis, kui ründaja loob teie filtri petmiseks stringidega eraldatud väärtuse?
hoiatus(dokument.küpsis);
Selles näites ei anna lihtsalt märgendi järgi filtreerimine midagi: selgesõnalise märgendi eemaldamisel käsitletakse andmeid täielikult kehtiva HTML-skriptielemendina. Sama võib öelda ka mis tahes kindla vormingu järgi filtreerimise kohta. Kõik see näitab selgelt, miks on võimatu muuta sisendandmete valideerimist rakenduse viimaseks kaitseahelaks.
Selle asemel, et proovida sisendeid parandada, kasutage lihtsalt valgesse nimekirja kantud validaatorit ja lükake sellised sisestuskatsed täielikult tagasi. Ja kui peate filtreerima, filtreerige alati enne kontrollimist, mitte kunagi pärast.
Ärge kunagi usaldage väliseid valideerijaid ja jälgige pidevalt haavatavusi. Varem märkisin, et valideerimine on vajalik iga kord, kui andmed uude konteksti üle kantakse. See kehtib ka väljaspool veebirakendust tehtud valideerimise kohta. Need juhtelemendid hõlmavad valideerimist või muid brauseris HTML-vormidele rakendatavaid piiranguid. Vaadake seda vormi HTML 5-st (sildid välja jäetud):Rep. Iirimaa Ühendkuningriik
HTML-vormid võivad sisendandmetele piiranguid seada. Saate piirata valikut fikseeritud üksuste loendiga, määrata miinimum- ja maksimumväärtused ning piirata teksti pikkust. HTML 5 võimalused on veelgi laiemad. Brauserid saavad kontrollida URL-e ja meiliaadresse, kontrollida kuupäevi, numbreid ja vahemikke (kuigi kahe viimase tugi on üsna meelevaldne). Brauserid saavad ka sisendit kinnitada, kasutades malli atribuudis sisalduvaid JavaScripti regulaaravaldisi.
Kogu selle juhtelementide rohkuse juures ei tohi me unustada, et nende eesmärk on parandada teie rakenduse kasutatavust. Iga ründaja saab luua vormi, mis ei sisalda teie algse vormi piiranguid. Saate isegi luua HTTP-kliendi vormide automatiseeritud täitmiseks!
Teine näide välistest valideerijatest on andmete hankimine kolmandate osapoolte API-delt, nagu Twitter. Sellel suhtlusvõrgustikul on hea maine ja seda usaldatakse tavaliselt kahtlemata. Aga kuna me oleme paranoilised, siis ärge isegi Twitterit usaldage. Kui see on ohus, sisaldavad selle vastused ebaturvalisi andmeid, milleks me ei ole valmis. Seetõttu rakendage isegi siin oma kontrolli, et mitte millegi korral kaitsetu olla.
Kui usaldame väliseid kontrollimisvahendeid, on turvaauke mugav jälgida. Näiteks kui HTML-i vorm seab maksimaalsele pikkusele piirangu ja me saame sisendandmeid, mille suurus on jõudnud piirini, siis on loogiline eeldada, et see kasutaja üritab valideerimisest mööda minna. Nii saame registreerida lünki välistes tööriistades ja võtta täiendavaid meetmeid võimalike rünnakute vastu, piirates juurdepääsu või päringute arvu.
Vältige tüübikonversioone PHP-s PHP ei ole tugevasti trükitud keel ning enamik selle funktsioone ja toiminguid on tüübikindlad. See võib põhjustada tõsiseid probleeme. Pealegi pole eriti haavatavad mitte väärtused ise, vaid valideerijad. Näiteks:Assert(0 == "0ABC"); //tagastab TRUE assert(0 == "ABC"); //tagastab TRUE (isegi ilma eesnumbrita!) assert(0 === "0ABC"); //tagastab NULL/Annab hoiatuse, et väidet ei saa kontrollida
Kui sisend- või väljundväärtused võivad olla stringid, kasutage validaatorite kavandamisel ranget võrdlust ja käsitsi tüübi teisendamist. Näiteks võivad vormid tagastada stringi, nii et kui töötate andmetega, mis peavad olema täisarvud, kontrollige kindlasti nende tüüpi.
Funktsiooni checkIntegerRange($int, $min, $max) ( if (is_string($int) && !ctype_digit($int)) ( return false; // sisaldab mittekohalisi märke ) if (!is_int((int) $int )) ( return false; // muu mittetäisarvuline väärtus või suurem kui PHP_MAX_INT ) return ($int >= $min && $int = $min && $int array("verify_peer" => TRUE))); $body = file_get_contents("https://api.example.com/search?q=sphinx", false, $kontekst);
UPD. PHP 5.6+ puhul on suvand ssl.verify_peer vaikimisi seatud väärtusele TRUE.
CURL-i laiendus sisaldab serveri valideerimist, nii et te ei pea midagi seadistama. Kuid programmeerijad suhtuvad mõnikord mõtlematult oma teekide ja rakenduste turvalisusesse. Seda lähenemisviisi võib leida kõigist raamatukogudest, millest teie rakendus sõltub.
Curl_setopt(CURLOPT_SSL_VERIFYPEER, vale);
Serveri kinnitamise keelamine SSL-kontekstis või curl_setopt() kasutamisel põhjustab haavatavuse vahemees-rünnakute suhtes. Kuid see lülitatakse välja just tüütute vigade probleemi lahendamiseks, mis viitavad rünnakule või rakenduse katsetele võtta ühendust hostiga, mille SSL-sertifikaat on valesti konfigureeritud või aegunud.
Veebirakendused võivad sageli toimida kasutaja toimingute puhverserverina, näiteks Twitteri klient. Ja vähim, mida saame teha, on hoida oma rakendusi kõrgete standardite järgi, mille on seadnud brauserid, mis hoiatavad kasutajaid ja püüavad kaitsta neid kahtlaste serveritega ühenduse loomise eest.
Järeldused Meil on sageli head võimalused turvalise rakenduse loomiseks. Kuid me ise eirame mõningaid mõistlikke piiranguid, et hõlbustada arendust, silumist ja keelata tüütute vigade väljund. Või üritame headest kavatsustest rakenduse loogikat asjatult keeruliseks ajada.Kuid ka häkkerid ei söö oma leiba asjata. Nad otsivad uusi viise, kuidas mööda hiilida meie ebatäiuslikust kaitsemehhanismist ja uurida meie kasutatavate moodulite ja teekide haavatavusi. Ja kui meie ülesanne on luua turvaline veebirakendus, siis nende ülesanne on ohustada meie teenuseid ja andmeid. Lõppkokkuvõttes töötame kõik oma toodete täiustamise nimel.
Kas teil on vaja kindlaks määrata parim aeg rasestumiseks, ennetada soovimatut rasedust või teada, millal on parim aeg oma partneriga seksida? Kui varem pidid naised selleks oma arsti juurde konsultatsioonile minema, siis nüüd on neil uus parim sõber - nutitelefon.
Viimastel aastatel on ilmunud palju naistele mõeldud rakendusi, mis võimaldavad hõlpsalt jälgida oma viljakaid päevi ja ovulatsiooni aega, samuti teha isiklikke märkmeid. Lisaks on neil palju muid funktsioone. Üks selline rakendus on Glow, mida kasutab juba 47 miljonit naist. Glow võimaldab teil jälgida selliseid asju nagu naiste meeleolu ning seksi kvaliteet ja sagedus. Tänu sellele rakendusele oli võimalik saada neid huvitavaid fakte naiste intiimse elu kohta kogu maailmast.
Naiste parimad riigid1. Kas sul puudub intiimsus? Mine Kanadasse. Selgub, et kanadalased seksivad 45% sagedamini kui keskmised rakenduse kasutajad.
2. Kuid ole ettevaatlik: Kanada on suurepärane koht rasestumiseks. Kanada naised võivad rasestuda 21% kergemini kui teised naised.
3. Austraalia naised seksivad ka sageli – 37% rohkem kui keskmised rakenduse kasutajad.
4. Ütlematagi selge, et Austraalia naistel on samuti hea võimalus rasestuda? Need on 14% kõrgemad kui teistel kasutajatel.
5. USA on hea koht õnnelikuks olemiseks. Ameerika naised seksivad 16% tõenäolisemalt kui teised naised.
6. Halvim koht õnnelikuks olemiseks? Ladina-Ameerika. Siin seksivad naised 4% harvemini kui keskmised rakenduse kasutajad.
seksuaalsed isud1. Naise seksuaalne isu vastab tema igakuisele tsüklile. Tsükli esimest päeva peetakse menstruatsiooni esimeseks päevaks, mis kestab ligikaudu viis päeva. Seega on naised seksist kõige vähem huvitatud ühel kuni viiel päeval kuus.
2. Paljud naised teatavad selle aja jooksul energiataseme või tuju muutumisest ja see on tavaliselt seotud seksiisu vähenemisega. Samuti tunnevad naised seksist vähem huvi terve nädala jooksul pärast menstruatsiooni.
3. Enamik naisi alustab uuesti seksiga oma tsükli 12. päeval.
4. Paljudel naistel on regulaarsed seksuaalsuhted tsükli 12. kuni 14. päevani. Rakendus Glow nimetab neid päevi "seksuaalsuse tipptasemeks".
5. Tegelikult tunnevad naised end kõige seksuaalsemalt oma tsükli 13. ja 14. päeval. Kuid siin on huvitav: nad ei pruugi sel ajal saada parimat ja kõige rahuldustpakkuvamat seksi.
6. Üle kõige naudivad naised seksi oma tsükli viimasel, 30. päeval. See päev Glow's on sildistatud "peak orgasmid".
Kas naised on rahul?1. Naised tunnevad end kõige õnnelikumana oma tsükli 15. ja 16. päeval ning ka siis, kui on eelnevatel päevadel palju seksinud.
2. Glow kasutajad registreerisid kahe aasta jooksul 7,6 miljonit seksuaalkontakti.
3. See tähendab, et iga minut seksib vähemalt seitse Glow äppi kasutavat naist.
4. Muide, kasutajad teatasid ka 2 miljonit korda, et on armunud. Rakendus jälgib ka 88 000 paari seksitsükleid ja viljakust.
5. Vaatamata olemasolevatele seksuaalkontaktidele ei ole kahjuks kõik naised nendega rahul. Peaaegu kolmandik naistest on valmis loobuma pigem seksist kui nutitelefonist.
6. Aga see tähendab ikkagi, et kaks kolmandikku loobuks pigem telefonidest kui seksist.