Devi definire il momento migliore concepire, prevenire una gravidanza indesiderata o scoprire quando il sesso con il tuo partner è il migliore? In precedenza, per questo, le donne dovevano andare a un consulto con il proprio medico, ma ora hanno un nuovo migliore amico: uno smartphone.
V l'anno scorso Ci sono molte applicazioni per le donne che rendono facile tenere traccia dei giorni fertili e dell'ovulazione, oltre a prendere appunti personali. Inoltre, hanno molte altre funzioni. Una di queste app è Glow, già utilizzata da 47 milioni di donne. Glow ti consente di tenere traccia di cose come l'umore delle donne e la qualità e la frequenza del sesso. Grazie a questa applicazione, è diventato possibile ottenerli Fatti interessanti sulla vita intima delle donne di tutto il mondo.
1. Ti manca l'intimità? Vai in Canada. Si scopre che i canadesi fanno sesso il 45% in più rispetto agli utenti medi dell'app.
2. Ma attenzione: il Canada è un ottimo posto per rimanere incinta. Le donne canadesi possono rimanere incinte il 21% più facilmente rispetto ad altre donne.
3. Anche le donne australiane hanno rapporti sessuali frequenti, il 37% in più rispetto agli utenti medi dell'app.
4. Inutile dire che anche le donne in Australia hanno buone possibilità di rimanere incinta? Sono il 14% in più rispetto ad altri utenti.
5. Stati Uniti - un buon posto diventare felice. Le donne americane hanno il 16% di probabilità in più di fare sesso rispetto alle altre donne.
6. Il posto peggiore per essere felici? America Latina. Qui le donne fanno sesso il 4% in meno rispetto agli utenti medi dell'app.
1. L'appetito sessuale di una donna corrisponde al suo. ciclo mensile. Il primo giorno del ciclo è considerato il primo giorno delle mestruazioni, che dura circa cinque giorni. Pertanto, le donne sono le meno interessate al sesso da uno a cinque giorni al mese.
2. Molte donne riferiscono un cambiamento nei livelli di energia o nell'umore durante questo periodo, e questo è solitamente associato a una diminuzione del desiderio sessuale. Inoltre, le donne sono meno interessate al sesso per un'intera settimana dopo le mestruazioni.
3. La maggior parte delle donne ricomincia a fare sesso il 12° giorno del ciclo.
4. Molte donne hanno rapporti sessuali regolari dal 12° al 14° giorno del ciclo. L'app Glow chiama questi giorni "il picco della sessualità".
5. In effetti, le donne si sentono più sessuali il 13° e il 14° giorno del ciclo. Ma ecco cosa è interessante: non necessariamente ottengono il sesso migliore e più soddisfacente in questo momento.
6. Soprattutto, le donne amano il sesso nell'ultimo, 30° giorno del loro ciclo. Questo giorno nel Glow è etichettato come "orgasmo di picco".
1. Le donne si sentono più felici nei giorni 15 e 16 del ciclo e anche quando hanno fatto molto sesso nei giorni precedenti.
2. Gli utenti Glow hanno registrato 7,6 milioni di contatti sessuali in due anni.
3. Ciò significa che ogni minuto almeno sette donne che utilizzano l'app Glow fanno sesso.
4. A proposito, gli utenti hanno anche riferito di essersi innamorati 2 milioni di volte. L'app tiene inoltre traccia dei cicli sessuali e della fertilità di 88.000 coppie.
5. Sfortunatamente, nonostante i contatti sessuali esistenti, non tutte le donne ne sono soddisfatte. Quasi un terzo delle donne è pronto a rinunciare al sesso piuttosto che a uno smartphone.
6. Ma ciò significa comunque che due terzi preferirebbero rinunciare ai telefoni piuttosto che al sesso.
Ciao. Mi chiamo Sasha Barannik. In Mail.Ru Group gestisco il reparto di sviluppo web, composto da 15 dipendenti. Abbiamo imparato a creare siti per decine di milioni di utenti e possiamo facilmente far fronte a diversi milioni di spettatori giornalieri. Io stesso mi occupo di sviluppo web da circa 20 anni e negli ultimi 15 anni di lavoro la programmazione è stata prevalentemente in PHP. Sebbene le caratteristiche del linguaggio e l'approccio allo sviluppo siano cambiati molto durante questo periodo, la comprensione delle principali vulnerabilità e la capacità di proteggersi da esse rimangono competenze chiave per qualsiasi sviluppatore.
Ci sono molti articoli e guide sulla sicurezza su Internet. Questo libro mi è sembrato abbastanza dettagliato, ma conciso e comprensibile. Spero che ti aiuterà a imparare qualcosa di nuovo ea rendere i tuoi siti più sicuri e affidabili.
P.S. Il libro è lungo, quindi la traduzione sarà suddivisa in diversi articoli. Quindi iniziamo...
Se consideriamo un'applicazione web astratta lanciata online dalla società X, possiamo presumere che contenga una serie di componenti che, se violati, possono causare danni significativi. Cosa, per esempio?
Sfortunatamente, i problemi di sicurezza vengono spesso risolti a posteriori. Si ritiene che la cosa più importante sia creare un'applicazione funzionante che soddisfi le esigenze degli utenti, con un budget e un lasso di tempo accettabili. È un comprensibile insieme di priorità, ma non puoi ignorare la sicurezza per sempre. È molto meglio tenerlo a mente in ogni momento implementando decisioni specifiche durante lo sviluppo quando il costo del cambiamento è basso.
La sicurezza secondaria è in gran parte il risultato della cultura della programmazione. Alcuni programmatori scoppiano in sudori freddi al pensiero di una vulnerabilità, mentre altri possono contestare l'esistenza di una vulnerabilità finché non riescono a dimostrare che non è affatto una vulnerabilità. Tra questi due estremi, ci sono molti programmatori che semplicemente alzeranno le spalle, perché non hanno ancora sbagliato. È difficile per loro capire questo strano mondo.
Poiché il sistema di sicurezza dell'applicazione web deve proteggere gli utenti che si fidano dei servizi dell'applicazione, è necessario conoscere le risposte alle domande:
Il punto di questa paranoia è rendere più facile classificare mentalmente tutto ciò che interagisce con la tua applicazione web (Utente, Hacker, Database, Input non attendibile, Manager, API REST) e quindi assegnare a ciascuna categoria un indice di attendibilità. Ovviamente "Hacker" non è affidabile, ma che dire di "Database"? "Input non attendibile" ha il suo nome per un motivo, ma filtreresti davvero un post del blog dal feed Atom affidabile di un collega?
Coloro che prendono sul serio l'hacking delle applicazioni Web imparano a sfruttare questa mentalità attaccando più spesso fonti di dati non vulnerabili, ma affidabili che hanno meno probabilità di avere un buon sistema di protezione. Questa non è una decisione casuale: vita reale i soggetti con un indice di fiducia più elevato destano meno sospetti. Sono queste fonti di dati a cui prendo prima attenzione quando analizzo un'applicazione.
Torniamo ai database. Supponendo che un hacker possa accedere al database (e noi paranoici supponiamo sempre), allora non ci si può mai fidare. La maggior parte delle applicazioni si fida dei database senza alcun dubbio. Dall'esterno, un'applicazione web sembra un'unica entità, ma al suo interno è un sistema di componenti separati che scambiano dati. Se consideriamo affidabili tutti questi componenti, se uno di essi viene violato, tutti gli altri verranno rapidamente compromessi. Tali catastrofici problemi di sicurezza non possono essere risolti con la frase "Se la base viene violata, allora abbiamo comunque perso". Puoi dirlo, ma non è affatto un dato di fatto che dovrai farlo se inizialmente non ti fidi della base e agisci di conseguenza!
Se utilizzi origini dati senza verificare che i dati siano completamente sicuri e idonei all'uso, sei potenzialmente esposto ad attacchi. È inoltre necessario verificare che i dati ricevuti corrispondano ai dati inviati. Se i dati non vengono messi al sicuro per il ritiro, anche tu avrai seri problemi. Tutto questo può essere espresso come regola per PHP “Convalida input; sfuggire all'output."
Queste sono le ovvie fonti di dati che dobbiamo controllare in qualche modo. Le origini possono includere anche repository lato client. Ad esempio, la maggior parte delle applicazioni riconosce gli utenti assegnando loro ID di sessione univoci, che possono essere memorizzati nei cookie. Se un utente malintenzionato ottiene il valore dal cookie, può impersonare un altro utente. Sebbene possiamo mitigare alcuni dei rischi associati all'intercettazione o alla manomissione dei dati degli utenti, non possiamo garantire la sicurezza fisica del computer di un utente. Non possiamo nemmeno garantire che gli utenti troveranno "123456" la password più stupida dopo "password". L'aggiunta di spezie è il fatto che oggi i cookie non sono l'unico tipo di archiviazione lato utente.
Un altro rischio spesso trascurato riguarda l'integrità del codice sorgente. In PHP, sta diventando sempre più popolare sviluppare applicazioni basate su un largo numero librerie, moduli e pacchetti liberamente accoppiati per framework. Molti di essi vengono scaricati da repository pubblici come Github, installati utilizzando programmi di installazione di pacchetti come Composer e il suo compagno Web Packagist.org. Pertanto, la sicurezza del codice sorgente dipende interamente dalla sicurezza di tutti questi servizi e componenti di terze parti. Se Github è compromesso, molto probabilmente verrà utilizzato per distribuire codice con un additivo dannoso. Se Packagist.org - l'attaccante sarà in grado di reindirizzare le richieste di pacchetti ai propri pacchetti dannosi.
Oggi Composer e Packagist.org sono interessati da vulnerabilità note nel rilevamento delle dipendenze e nella distribuzione dei pacchetti, quindi ricontrolla sempre tutto nel tuo ambiente di produzione e controlla l'origine di tutti i pacchetti con Packagist.org.
Dovrai riflettere attentamente per ridurre la probabilità di danni causati da un attacco a un'applicazione web. Nel corso della storia parlerò di possibili metodi di attacco. Alcuni di loro sono evidenti, altri no. Ma in ogni caso, per risolvere il problema, è necessario tenere conto di alcuni principi di sicurezza di base.
Fonti specializzate di saggezza sulla sicurezza (incentrate su PHP e oltre) forniscono una conoscenza più dettagliata in generale. La cosa più vicina a una Bibbia di sicurezza PHP è OWASP, con articoli, tutorial e suggerimenti. Se qualcosa è scoraggiato su OWASP, non farlo mai!
Ad esempio, le violazioni dei dati (una forma di hacking ben documentata e diffusa) sono spesso viste come piccoli problemi di sicurezza perché non colpiscono direttamente gli utenti. Tuttavia, la divulgazione di informazioni su versioni software, linguaggi di sviluppo, posizioni del codice sorgente, logica dell'applicazione e logica aziendale, struttura del database e altri aspetti dell'ambiente dell'applicazione Web e delle operazioni interne è spesso essenziale per un attacco riuscito.
Allo stesso tempo, gli attacchi ai sistemi di sicurezza sono spesso combinazioni di attacchi. Individualmente sono insignificanti, ma allo stesso tempo a volte aprono la strada ad altri attacchi. Ad esempio, l'iniezione SQL a volte richiede un nome utente specifico, che può essere ottenuto utilizzando un Timing Attack contro l'interfaccia amministrativa, invece di una forza bruta molto più costosa e evidente. A sua volta, SQL injection consente di implementare un attacco XSS su un account amministrativo specifico senza attirare l'attenzione su un numero elevato di voci di registro sospette.
Il pericolo di guardare le vulnerabilità in isolamento sta nel sottovalutare la loro minaccia e, quindi, nel trattarle con troppa negligenza. I programmatori sono spesso troppo pigri per correggere una vulnerabilità perché la considerano troppo piccola. Si pratica anche trasferire la responsabilità dello sviluppo sicuro sui programmatori finali o sugli utenti, e spesso senza documentare problemi specifici: anche l'esistenza di queste vulnerabilità non viene riconosciuta.
L'apparente insignificanza non è importante. È irresponsabile costringere i programmatori o gli utenti a correggere le tue vulnerabilità, soprattutto se non ne hai nemmeno informato.
Ricordi le mie parole su chi ti puoi fidare? Nessuno e niente. Nel mondo PHP, il consiglio è ovunque di non fidarsi dell'"input dell'utente". Questa è una delle categorie in base al grado di fiducia. Partendo dal presupposto che non ci si può fidare degli utenti, pensiamo che ci si possa fidare di tutto il resto. Questo non è vero. Gli utenti sono la fonte di input inaffidabile più ovvia perché non li conosciamo e non possiamo controllarli.
Filter_var("php://example.org", FILTER_VALIDATE_URL);
Il filtro funziona senza problemi. Il problema è che l'URL php:// accettato può essere passato a una funzione PHP che si aspetta di ricevere un indirizzo HTTP remoto, invece di restituire i dati dallo script PHP in esecuzione (tramite un gestore PHP). La vulnerabilità si verifica perché l'opzione di filtro non dispone di un metodo che limita gli URI consentiti. Anche se l'applicazione prevede un collegamento http, https o mailto, non un URI specifico di PHP. È necessario in ogni caso evitare un approccio così eccessivamente generale alla verifica.
Diciamo che ho ricevuto dati contenenti un nome. Posso facilmente controllarlo per apostrofi, trattini, parentesi, spazi e tutta una serie di caratteri Unicode alfanumerici. Il nome è un dato valido che può essere utilizzato per la visualizzazione (primo uso previsto). Ma se lo usi da qualche altra parte (ad esempio, in una query di database), sarà in un nuovo contesto. E alcuni dei caratteri consentiti in un nome saranno pericolosi in questo contesto: se il nome viene convertito in una stringa per eseguire un'iniezione SQL.
Si scopre che la convalida dell'input è intrinsecamente inaffidabile. È più efficace per troncare valori inequivocabilmente non validi. Dì quando qualcosa deve essere un numero intero, una stringa alfanumerica o un URL HTTP. Questi formati e valori hanno i loro limiti e, se adeguatamente controllati, hanno meno probabilità di rappresentare una minaccia. Altri valori (testo illimitato, array GET/POST e HTML) sono più difficili da controllare e hanno maggiori probabilità di contenere dati dannosi.
Poiché la maggior parte delle volte la nostra applicazione passerà dati tra contesti, non possiamo semplicemente controllare tutti gli input e considerare il lavoro svolto. Il check-in è solo il primo ciclo di protezione, ma non l'unico.
Insieme alla convalida dei dati di input, viene spesso utilizzato un metodo di protezione come l'escape. Con esso, i dati vengono controllati per la sicurezza quando si accede a ogni nuovo contesto. Di solito questo metodo viene utilizzato per la protezione contro il cross-site scripting (XSS), ma è richiesto anche in molte altre attività, come strumento di filtraggio.
L'escape protegge da interpretazioni errate da parte del destinatario dei dati in uscita. Ma questo non è sufficiente: poiché i dati entrano in un nuovo contesto, è necessario un controllo specifico per un contesto specifico.
Sebbene ciò possa essere percepito come una duplicazione della convalida iniziale dell'input, in realtà le fasi di convalida aggiuntive sono più adatte al contesto attuale quando i requisiti in materia di dati sono molto diversi. Ad esempio, i dati provenienti da un modulo potrebbero contenere una percentuale. La prima volta che lo utilizziamo, controlliamo che il valore sia effettivamente un intero. Ma quando lo si passa al nostro modello applicativo, possono sorgere nuovi requisiti: il valore deve rientrare in un determinato intervallo, obbligatorio per il funzionamento della logica di business dell'applicazione. E se questo controllo aggiuntivo non viene eseguito nel nuovo contesto, possono sorgere seri problemi.
Un buon esempio è qualsiasi procedura di convalida progettata per rendere sicuro l'HTML dal punto di vista dell'output senza caratteri di escape in un modello. Se utilizziamo una blacklist, dobbiamo verificare che l'HTML non contenga elementi, attributi, stili e JavaScript eseguibili pericolosi. È un sacco di lavoro e i pulitori HTML basati su blacklist riescono sempre a trascurare pericolose combinazioni di codice. E gli strumenti di whitelisting eliminano questa ambiguità consentendo solo gli elementi e gli attributi consentiti noti. Tutti gli altri saranno semplicemente separati, isolati o rimossi, qualunque essi siano.
Quindi la whitelist è preferibile per qualsiasi procedura di verifica a causa della maggiore sicurezza e affidabilità.
Questo di solito è alquanto dannoso. I filtri tradizionali includono, ad esempio, la rimozione di tutti i caratteri tranne i numeri dai numeri di telefono (incluse parentesi e trattini extra) o il taglio dello spazio orizzontale o verticale non necessario. In tali situazioni, viene eseguita una pulizia minima per eliminare gli errori di visualizzazione o di trasmissione. Tuttavia, puoi lasciarti trasportare dall'utilizzo del filtro per bloccare i dati dannosi.
Una conseguenza del tentativo di correggere l'input è che un utente malintenzionato può prevedere l'impatto delle tue correzioni. Diciamo che c'è un valore di stringa non valido. Lo cerchi, lo elimini e completi il filtraggio. Cosa succede se un utente malintenzionato crea un valore separato da stringhe per ingannare il filtro?
В этом примере простая фильтрация по тэгу ничего не даст: удаление явного тэга
Articolo precedente: Biossido di titanio: che cos'è?
Articolo successivo: Polpa di granchio congelata - calorie e composizione