casa » Salute » Fatti divertenti sul sesso che nessuno ti ha mai detto prima. Fatti divertenti sul sesso che nessuno ti ha mai detto prima La fine completa è semplice 4

Fatti divertenti sul sesso che nessuno ti ha mai detto prima. Fatti divertenti sul sesso che nessuno ti ha mai detto prima La fine completa è semplice 4

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.

I migliori paesi per le donne

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.

appetiti sessuali

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".

Le donne sono soddisfatte?

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...

Un altro libro sulla sicurezza PHP?

Ci sono molti modi per avviare un libro sulla sicurezza PHP. Sfortunatamente, non ne ho letto nessuno, quindi dovrò affrontarlo nel processo di scrittura. Forse inizierò con il più semplice e spero che tutto funzioni.

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?

  1. Danno agli utenti: ottenere l'accesso a e-mail, password, dati personali, dettagli carte bancarie, segreti aziendali, elenchi di contatti, cronologia delle transazioni e segreti profondamente custoditi (come qualcuno che chiama il proprio cane Glitter). La fuga di questi dati danneggia gli utenti (individui e aziende). Anche le applicazioni Web che utilizzano tali dati in modo improprio e i siti che sfruttano la fiducia degli utenti possono causare danni.
  2. Danno della società X stessa: I danni dell'utente si traducono in danni reputazionali, risarcimenti, perdita di informazioni aziendali critiche, costi aggiuntivi come infrastruttura, miglioramenti della sicurezza, riparazione, costi legali, ingenti vantaggi per i dirigenti di alto livello licenziati e così via.
Mi concentrerò su queste due categorie perché includono la maggior parte dei fastidi che la sicurezza delle applicazioni Web dovrebbe prevenire. Tutte le aziende che hanno riscontrato gravi violazioni della sicurezza si affrettano a scrivere nei comunicati stampa e sui siti Web come ne sono in soggezione. Quindi ti consiglio di sentire in anticipo con tutto il cuore l'importanza di questo problema prima di incontrarlo nella pratica.

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:

  1. Chi vuole attaccarci?
  2. Come possono attaccarci?
  3. Come possiamo fermarli?

Chi vuole attaccarci?

La risposta alla prima domanda è molto semplice: tutto e tutto. Sì, l'intero universo vuole darti una lezione. Un ragazzo con un computer overcloccato che esegue Kali Linux? Probabilmente ti ha già attaccato. Un uomo sospettoso a cui piace mettere i bastoni nelle ruote? Probabilmente ha già assunto qualcuno per attaccarti. API REST affidabile attraverso la quale ricevi dati ogni ora? Probabilmente è stato violato un mese fa per fornirti dati infetti. Anche io posso attaccarti! Quindi non credere ciecamente a questo libro. Considerami bugiardo. E trova un programmatore che mi porti all'acqua pulita ed esponga i miei cattivi consigli. D'altra parte, forse sta per hackerare anche te...

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!

Come possono attaccarci?

La risposta alla seconda domanda è un elenco piuttosto ampio. Puoi essere attaccato da qualsiasi punto in cui ogni componente o livello di un'applicazione web stia ricevendo i suoi dati. In sostanza, le applicazioni web elaborano semplicemente i dati e li spostano da un luogo all'altro. Richieste degli utenti, database, API, feed di blog, moduli, cookie, repository, variabili di ambiente PHP, file di configurazione, di nuovo file di configurazione, persino file PHP che esegui, tutti potenzialmente possono essere infettati da dati di violazione della sicurezza e danni. . Infatti, se i dati dannosi non sono esplicitamente presenti nel codice PHP utilizzato per la richiesta, è probabile che arrivino come un "carico utile". Ciò presuppone che a) tu abbia scritto il codice sorgente PHP, b) sia stato adeguatamente rivisto ec) non sei stato pagato da organizzazioni criminali.

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.

Come possiamo fermarli?

Infrangere la sicurezza di un'applicazione Web può essere ridicolmente facile e richiedere molto tempo. È corretto presumere che ogni applicazione Web abbia una vulnerabilità da qualche parte. Il motivo è semplice: tutte le applicazioni sono fatte da persone e le persone commettono errori. Quindi la sicurezza perfetta è un sogno irrealizzabile. Tutte le applicazioni possono contenere vulnerabilità e il compito dei programmatori è ridurre al minimo i rischi.

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.

Principi di sicurezza di base

Quando si sviluppano mezzi di protezione, la loro efficacia può essere valutata sulla base delle seguenti considerazioni. Alcuni li ho già citati sopra.
  1. Non fidarti di nessuno e di niente.
  2. Assumere sempre lo scenario peggiore.
  3. Applicare una protezione multilivello (Defence-in-Depth).
  4. Rispetta il principio "più semplice è, meglio è" (Keep It Simple Stupid, KISS).
  5. Rispettare il principio del "privilegio minimo".
  6. Gli aggressori percepiscono l'ambiguità.
  7. Leggi la documentazione (RTFM), ma non fidarti mai.
  8. Se non è stato testato, non funziona.
  9. È sempre colpa tua!
Esaminiamo brevemente tutti i punti.

1. Non fidarti di nessuno e di niente

Come discusso in precedenza, l'atteggiamento corretto è presumere che tutto e tutti con cui interagisce la tua applicazione web vogliano hackerarla. Ciò include altri componenti o livelli dell'applicazione necessari per elaborare le richieste. Tutto e tutti. Senza eccezioni.

2. Assumere sempre lo scenario peggiore

Molti sistemi di sicurezza hanno una proprietà comune: non importa quanto bene siano realizzati, ognuno può essere violato. Se prendi questo in considerazione, capirai rapidamente il vantaggio del secondo punto. Concentrarsi sullo scenario peggiore aiuterà a valutare l'entità e la gravità dell'attacco. E se succede, allora potresti essere in grado di ridurre le spiacevoli conseguenze attraverso protezioni aggiuntive e modifiche nell'architettura. Forse la soluzione tradizionale che stai utilizzando è già stata sostituita da qualcosa di meglio?

3. Applicare la difesa in profondità

La protezione a strati è presa in prestito dalla scienza militare, perché le persone hanno capito da tempo che più pareti, sacchi di sabbia, equipaggiamento, giubbotti antiproiettile e fiasche che coprono gli organi vitali dai proiettili e dalle lame nemici sono il giusto approccio alla sicurezza. Non sai mai quale dei precedenti non proteggerà e devi assicurarti che diversi livelli di protezione ti consentano di fare affidamento su più di una fortificazione sul campo o su una formazione di battaglia. Naturalmente, non si tratta solo di singoli fallimenti. Immagina un aggressore che si arrampica su un gigantesco muro medievale usando una scala e scopre che c'è un altro muro dietro di esso, da dove vengono inondati di frecce. Gli hacker si sentiranno allo stesso modo.

4. Attenersi al principio "più semplice è, meglio è" (Keep It Simple Stupid, KISS)

Le migliori difese sono sempre semplici. Sono facili da sviluppare, implementare, comprendere, utilizzare e testare. La semplicità riduce gli errori, incoraggia lavoro corretto applicazioni e ne facilita l'implementazione anche negli ambienti più complessi e ostili.

5. Attenersi al principio del "privilegio minimo"

Ciascun partecipante allo scambio di informazioni (utente, processo, programma) dovrebbe avere solo quei diritti di accesso di cui ha bisogno per svolgere le sue funzioni.

6. Gli aggressori percepiscono l'ambiguità

"Sicurezza attraverso l'oscurità" si basa sul presupposto che se usi la difesa A e non dici a nessuno cos'è, come funziona o se esiste, allora magicamente ti aiuta, perché gli attaccanti sono in perdita. In realtà, questo dà solo un piccolo vantaggio. Spesso, un abile attaccante può capire cosa hai fatto, quindi devi usare anche difese esplicite. Coloro che sono indebitamente convinti che una difesa vaga elimini la necessità di una difesa reale dovrebbero essere puniti specificamente per liberarsi delle illusioni.

7. Leggi la documentazione (RTFM), ma non fidarti mai

Il manuale PHP è la Bibbia. Ovviamente, non è stato scritto dal Flying Spaghetti Monster, quindi tecnicamente potrebbe contenere una serie di mezze verità, omissioni, interpretazioni errate o errori non ancora notati o corretti. Lo stesso vale per Stack Overflow.

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!

8. Se non è stato testato, non funziona

Quando si implementano le protezioni, è necessario scrivere tutti i test necessari che funzionano per la verifica. Compreso fingere di essere un hacker per il quale la prigione sta piangendo. Può sembrare inverosimile, ma avere familiarità con le tecniche di hacking delle applicazioni web è una buona pratica; imparerai le possibili vulnerabilità e la tua paranoia aumenterà. Allo stesso tempo, non è necessario raccontare al management la gratitudine appena acquisita per l'hacking di un'applicazione web. Assicurati di utilizzare strumenti automatizzati per identificare le vulnerabilità. Sono utili, ma ovviamente non sostituiscono le revisioni del codice di qualità e nemmeno i test manuali dell'applicazione. Più risorse spendi per i test, più affidabile sarà la tua applicazione.

9. È sempre colpa tua!

I programmatori sono abituati a credere che le vulnerabilità della sicurezza verranno rilevate come attacchi sparsi e le loro conseguenze sono insignificanti.

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.

Convalida dell'input

La convalida dell'input è il perimetro di difesa esterno della tua applicazione web. Protegge la logica aziendale principale, l'elaborazione dei dati e la generazione di output. In senso letterale, tutto ciò che è al di fuori di questo perimetro, ad eccezione del codice eseguito dalla presente richiesta, è considerato territorio nemico. Tutti i possibili ingressi e uscite del perimetro sono presidiati giorno e notte da sentinelle bellicose che prima sparano e poi fanno domande. Collegati al perimetro sono "alleati" sorvegliati separatamente (e dall'aspetto molto sospetto), inclusi "Modello", "Database" e "File System". Nessuno vuole sparargli, ma se tentano la fortuna... bang. Ogni alleato ha il suo perimetro, che può fidarsi o meno del nostro.

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.

Criteri di verifica

La convalida dell'input è la difesa più ovvia e meno sicura di un'applicazione web. La stragrande maggioranza delle vulnerabilità è dovuta a errori nel sistema di verifica, quindi è molto importante che questa parte della protezione funzioni correttamente. Può fallire, ma attenersi comunque alle seguenti considerazioni. Quando si implementano validatori personalizzati e si utilizzano librerie di convalida di terze parti, tenere sempre presente che le soluzioni di terze parti tendono a eseguire attività comuni e a omettere le routine di convalida delle chiavi di cui l'applicazione potrebbe aver bisogno. Quando si utilizzano librerie progettate per esigenze di sicurezza, accertarsi di verificarne personalmente le vulnerabilità e il corretto funzionamento. Raccomando inoltre di non dimenticare che PHP può mostrare comportamenti strani e forse non sicuri. Guarda questo esempio, tratto dalle funzioni di filtro:

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.

Fai attenzione al contesto

La convalida dell'input dovrebbe impedire l'immissione di dati non sicuri nell'applicazione web. Un grave ostacolo: i controlli di sicurezza dei dati vengono generalmente eseguiti solo per il primo utilizzo previsto.

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.

Usa solo whitelist, non blacklist

Blacklisting e whitelisting sono due approcci principali alla convalida dell'input. Nero significa verificare la presenza di dati non validi e bianco significa verificare la presenza di dati validi. La whitelist è preferibile perché durante la convalida vengono passati solo i dati che ci aspettiamo. A loro volta, le liste nere tengono conto solo delle ipotesi dei programmatori su tutti i possibili dati errati, quindi è molto più facile confondersi, perdere qualcosa o fare un errore qui.

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à.

Non tentare mai di correggere l'input

La convalida dell'input è spesso accompagnata da filtri. Se durante il controllo valutiamo semplicemente la correttezza dei dati (con emissione di un risultato positivo o negativo), allora il filtraggio modifica il dato in controllo in modo che soddisfi regole specifiche.

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?

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

Articolo precedente: Articolo successivo:


© 2015 .
Informazioni sul sito | Contatti
| mappa del sito