
si il mio nome è andreas Alba, vengo da un
La compagnia svedese ha chiamato truseq se tu
erano nella sessione precedente sai a
un po ‘ma truseq il mio collega
inviato via email a Kannamma abbiamo parlato di ciò che siamo
situato a Malmö ea Stoccolma in
Svezia ho intenzione di parlare di
schemi di codifica sicuri e per favore
ricorda di impegnarti attraverso il go-to
applicazione e senza ulteriori indugi
Cominciamo così io lavoro al
compagnia truseq, eccoci qui al sud
L’Africa e il nostro viaggio aziendale quest’anno
in realtà ho passato il mio tempo a rusik
sviluppo e auditing della sicurezza
la sicurezza dei sistemi critici è importante
giusto hai bisogno di discuterne non solo
con i tuoi bambini ma con i tuoi colleghi
pure e la cosa con sicurezza è
che è difficile fare affidamento sulla sicurezza su a
progetto quando è quasi finito
ha davvero bisogno di essere parte integrante di
sviluppo perché abbia successo e
oggi parlerò di alcuni
concetti e modelli che ti aiuteranno
nelle tue attività quotidiane di codifica
in particolare parlerò un po ‘ di fiducia
per impostare il palco all’inizio sono
andando a passare al primo schema
si chiama sicurezza basata su dominio e
c’è qualcosa chiamato non sicuro
schema di cui parlerò
immutabilità e lo sarò anche io
parlando di qualcosa chiamato il
inversione del ciclo di vita, quindi prendiamoci
ha iniziato a fidarsi delle fondamenta del software
la sicurezza bene è davvero perché molto
di problemi di sicurezza si riducono a poveri
comprensione di dove noi o il nostro
il software sta ponendo la sua fiducia come facciamo noi
controlla chi abbiamo fiducia come stabiliamo
si fida che questi siano veramente importanti
domande se vuoi fare il tuo
software sicuro quindi diamo un’occhiata a
una tipica interazione che può accadere
ecco qui un uomo d’affari, Bob, lui
in banca vuole trasferire X euro
dall’account Y al conto Z va bene
sapere che cosa potrebbe andare storto questo
è semplice transazione tipica che tu
avere in diverse forme nel tuo
applicazioni qualunque cosa possa essere a
qualunque sia il valore del tuo applicazione potrebbe essere
quindi diamo un’occhiata alla prima interazione
il passo di autenticazione come viene chiamato
come può la banca essere sicura che Bob sia davvero
è Bob e come può la banca essere sicura
scusa, come può Bob essere sicuro che la banca
è davvero la banca di cui stanno parlando
alla festa corretta se guardiamo al
operazione reale che deve essere eseguita
sappiamo che Bob possiede l’ account perché lo fa
conosciamo quell’account perché tiene X euro
e sappiamo persino che X è un numero
queste sono tutte cose che sono nostre
l’applicazione deve gestire diversamente
siamo nei guai perché conosci Bob
potrebbe davvero rovinarci qui o in banca
potrebbe avvitare Bob a seconda di quale lato
sei in questo caso così per
visualizzare la fiducia è piuttosto utile per
pensa alla tua applicazione come a un cerchio
e c’è una cerchia di fiducia e la tua
l’applicazione è al suo interno, così tu hai
tutta questa roba che è al di fuori di
la tua cerchia di fiducia
non ci si può fidare di cui non ci si può fidare
utente la richiesta dati il database che
sa cosa c’è lì dentro è il tuo
domanda responsabile della messa
tutto lì dentro forse non a terzi
servizi ecc ecc in modo da ciò che è necessario
capire quale deve essere la tua applicazione
capire è dove i confini di fiducia
sono nel tuo codice da dove inizia la fiducia
dove finisce la fiducia e io vado
scusarsi in anticipo per questa prossima diapositiva
potresti voler coprire i tuoi occhi solo io
voglio davvero martellare a casa questo punto
su ciò che è affidabile e non affidabile
tutto ciò che è all’interno del cerchio è affidabile
tutto al di fuori non è affidabile e
noterai alcune cose a riguardo
soprattutto quanto più grande è il non fidato
area è loro la loro fiducia e
importante che sia illimitato il
fidato è molto limitato e specifico te
può enumerare tutti gli stati fidati
mentre il non fidato è illimitato e
si sa in un modo poco pratico è
imposto
è per enumerare gli stati che possono
capita e questo è il motivo per cui l’ascolto è nero
non funziona quando si tenta di enumerare
la roba che non è permesso devi
fare la lista bianca ed elencare la roba
è permesso ciò di cui ti fidi
così bene come fa qualcosa dal
lato non attendibile diventare fiducia dopo tutto
dobbiamo interagire con tutte queste cose
altrimenti la nostra applicazione è carina
inutile così attraverso ogni sviluppatore
convalida attività preferita che è il
cosa più divertente da fare quando sei
sviluppare un diritto di applicazione che è
la prima cosa che inizi con te
sparato per iniziare con la convalida così
spero che dopo questa sessione lo farai
almeno penso che faccia un po ‘meno
quanto si faceva prima così bene due cose
può accadere, naturalmente, sia la
passate di validazione ci fidiamo dei dati o
non ci fidiamo e lo rifiutiamo così
lo teniamo fuori dalla nostra cerchia di fiducia
e se stiamo parlando di validazione
solo per definirlo un po ‘di più
è il tipo tipico di convalida che
probabilmente pensi di assicurarti che
i dati che ottieni sono validi nel tuo dominio
come è X anche un numero un altro i dati
quello è Bob quando è trasferito al
banca o qualunque altra cosa
nomi di fantasia canonicalizzazione o il mio
roba che deve accadere prima
la convalida qui è un tipico esempio di
normalizzazione in cui si ottiene un percorso di file
forse ami le persone per caricare materiale in
o scaricare qualsiasi cosa dal file pubblico C
caricare e se solo il tuo programma
convalida l’inizio di questo su a
percorso normalizzato allora tu dici che va bene
è il caricamento di file pubblici in C ma tu hai un
percorso traversal attacco lì con un punto
punto barra che taglia il sistema operativo allora
collasserà due chiavi segreti che
beh, ovviamente, da qualche parte non vuoi
l’utente che cerca dove sono
file caricati o scaricati qualunque cosa sia
la normalizzazione deve avvenire prima
convalida allora vedi perché lì
c’è qualcosa di igienizzante in te
ripulire pericolosi dati sconosciuti tipici
log injection Sono disposto a scommetterlo
quasi nessuno di voi sta facendo la sanitizzazione
conosci i tuoi dati di registro perché è così
comune quando lo facciamo revisionare così tutto
non prendi un certo valore ed è
non si inserisce nel tuo dominio si registra il
errore dire che ho ricevuto alcuni dati non validi
questo è quello perché fa bene
controllo degli errori o debugging in seguito
quindi l’utente può iniettare voci di registro
nel tuo registro che potrebbe fare come
procedimenti giudiziari più difficili in seguito, se tu
può mettere in discussione il log in modo che sia qualcosa
a pensare se l’utente sa cosa
tipo di formato di registro è possibile iniettare il male
registra le voci e confondono il tuo debugging
o controllo degli errori in seguito mi scusi
parlato ha toccato questo prima di sempre
preferisco l’elenco bianco sopra l’elenco nero
perché bene l’area rossa è illimitata
e l’area verde è limitata a destra
non puoi enumerare tutti gli invalidi
roba e un’altra cosa buona dell’essere
rigoroso con la convalida è che trova
bug presto a destra invece di averne un po ‘
errore come 8 passi giù nel codice e
devi passare un giorno lo sai
rilevamento, ma come è finito?
qui vicino al database e tu giri
fuori che è un numero che si sa
negativo invece di positivo qui
che avresti potuto prendere molto presto
qui nell’interfaccia utente quasi la strada
applicazione quindi non è solo per
sicurezza ti fa risparmiare tempo e tempo
mal di testa e te ogni volta che fai
validazione ogni volta che si ha a
parametro qualcosa che devi convalidare
devi chiederti qual è il
il più ampio intervallo accettabile e poi no
accetta più di quanto non pensi
beh sai forse tra sei mesi
sapere che le persone trasferiranno queste grandi
importi o forse sai che cambieranno
il tempo di scadenza ancora qualche anno in più
su queste carte di credito lo metto appena
lì dentro quindi non dobbiamo fare un
aggiornamento sai che non farlo è solo essere
davvero severo e se devi cambiare
aggiorna il tuo software che è meglio così
confidiamo che in generale è il
fondamento della sicurezza del software e
passiamo al primo schema qui
lo facciamo
sicurezza basata sul dominio quanti qui
ho sentito parlare del design guidato da domini
mani in alto per favore va bene, è buono
non è davvero complicato questo sei tu
modella sempre il tuo dominio come con
oggetti propri che interagiscono e sono
creato in modi speciali, quindi non lo è
complicato ma puoi cercarlo se
non avrai bisogno di sapere di più che il
termine o questo modello guidato dal dominio
sicurezza ci aiuta con una fiducia
confine e ci dà la convalida
ovunque in un buon modo
e il modello è stato coniato da due
sviluppatori della società svedese Omega
Point Yann villain de Oak e l’alba di
yunsun così dominio durante la sicurezza è
fondamentalmente il principale design urbano plus
alcune convenzioni per in patata
convalida che daremo un’occhiata
ora torniamo al nostro
l’interazione con Bob in banca è qui
Bob di nuovo, quindi questa è una nuova transazione
entrambi la banca si fida di lui e già
poi si dimentica di convalidare e Bob vuole
trasferire un negativo di 1.000 euro sicuro
Vai avanti
l’accattivante Bob si presume essere quasi
Svedese svedese mille euro
kroner o nota in tasca lì così
il problema con la convalida è quello
la stessa validazione deve sempre essere
eseguito più e più volte e questo è
Probabilmente è per questo perché è facile dimenticare di
convalidare da qualche parte perché non è possibile
vedo davvero la foresta per gli alberi e
finisce ovunque e il codice se
non si riesce così è lì
probabilmente è per questo che è così facile
dimenticalo perché lo vedi ovunque
e poi se manca in un posto
è difficile è facile perdere ed è così
facile dimenticare che è necessario anche
convalidare da fonti interne pensare
fonti che pensi non possano darti
dati errati come il tuo database per
esempio intendo sicuramente che lo ritieni valido
hai igienizzato e convalidato tutto
che entra quando viene di nuovo
conto posso davvero fidarmi bene c’è
qualcosa se non hai correttamente
validato se se o se sono l’attaccante
è davvero intelligente possono archiviare gli script
ad esempio lo scripting cross-site è un
tipico attacco web in cui un aggressore ha
stato in grado di inserire del testo di script
il tuo database e poi lo mostri su a
pagina forse dico che il nome utente è a
script e quindi alcuni JavaScript ottiene
eseguito e quindi puoi attaccare
altri utenti con questo script, quindi se andiamo
torniamo alla cerchia di fiducia che abbiamo qui
convalida di un primitivo
tipi come stringhe e interi che puoi
essere sicuro anche se ti ricordi di
la validazione ovunque ma è dura
guardare una variabile nel tuo
oggetto dell’applicazione per vedere se è stato
se è di fiducia o meno se hai a che fare
con tipi primitivi perché guardano
proprio come qualsiasi altro tipo cosa
la sicurezza basata sul dominio dice che è così
tipi primitivi e strutture dati sono
non attendibile per impostazione predefinita se viene visualizzata una stringa
e integer un array di byte una collezione di
qualunque cosa venga passata in un pubblico
funzione o restituita da una funzione attivata
il tuo oggetto allora che i dati non sono attendibili
e tu non dovresti davvero vederlo
lì perché dovresti vedere solo il dominio
oggetti che spiegherò di cosa si tratta
oggetti di dominio per convenzione nel dominio
durante la sicurezza hanno convalida integrata
il che significa che non possono essere istanziati
senza essere convalidato internamente
prima se la convalida non supera un
l’eccezione è lanciata e l’oggetto Kadim
anche essere creato quindi vediamo qui hmm così
nella nostra cerchia di fiducia, lo faremo
mai vedere stringhe e interi
passato intorno avremo solo corretto
dominio oggetti come la corda avrebbe
probabilmente corrisponde ad un oggetto account
un numero di conto un numero intero può essere un
importo oggetto che è quindi correttamente
convalidato e la cosa buona con
la sicurezza basata sul dominio è questo
Ottieni automaticamente la convalida dei dati
ovunque non è solo dove pensi
che oh, ecco il confine di fiducia in cui mi trovo
un servizio web c’è un limite di fiducia
qui mi ricordo di convalidare l’input
i dati lo conoscono ogni volta che ci provi
istanziare un oggetto dominio è
convalidato e ne prendi immediatamente uno qualsiasi
dati malvagi o fuori dai limiti
che entrano così è la convalida
ovunque non nei luoghi dove tu
aspettati solo che i dati cattivi appaiano
perché è difficile capire dove
tutti i dati cattivi appariranno quindi ecco a
tipico oggetto dominio quindi un account
numero che è costruito con un valore
e per convenzione quindi l’ oggetto dominio
è immediatamente validato alla creazione
quindi non c’è modo per noi di finire
un oggetto dominio non valido qui e
un altro non necessario ma molto utile
cosa con con questi domini
è se sono immutabili che sto per essere
parlando di immutabilità più tardi
è fondamentalmente che loro non possono
cambia lo stato interno dell’oggetto
non può cambiare dopo che sono stati
istanziato in modo da vedere quella stringa il
il valore qui è un finale e questo è Java
l’ultimo significa che non può essere impostato
di nuovo e non c’è setter per il for
questo valore solo un rapido mani su come
molti stanno programmando in Java qui tutto
destra
c-sharp okay e gli altri vanno bene
Sì, va bene quindi è una buona partita allora
perché ci sarà un po ‘di Java e
gli esempi c-sharp qui si raffreddano proprio tutti
l’oggetto dominio è la procreazione convalidata
non c’è modo per noi per convenzione
finire con un oggetto dominio non valido noi
ovviamente, ricorda di farlo
validazione in ogni oggetto dominio ma
dopo un po ‘diventa una seconda natura
quando fai il tuo oggetto quindi torna da noi
abbiamo un esempio abbiamo un servizio web
da cui vengono prelevati alcuni dati di sapone non attendibili
all’esterno lo convalidiamo otteniamo un utente
oggetto conteggio oggetto che qualunque cosa ma
quando avremo alcuni dati non validi lo faranno
rimbalzare come un’eccezione e noi
non dobbiamo preoccuparci di poter essere felici
questa è un’altra cosa con questo è quello
questi tipi primitivi se ti dimentichi di
fallo davvero fuori così eccoci qui
avere una funzione reticolare che richiede a
spline e reticolato un certo angolo
quindi sai cosa succede con l’angolo è un
intero bene, non è un oggetto dominio
non possiamo non fidarci di questo è l’angolo
dovrebbe essere negativo
qual è l’intervallo consentito di angolo forse
possiamo solo reticolare alcuni angoli per
lo sai di sinistra e di destra qualunque sia
qual è l’intervallo consentito nel nostro dominio
ora la funzione reticolare deve
ricorda di eseguire questa convalida così
ovviamente questo è come dovrebbe essere
sembra che dovremmo avere un’angolazione corretta
oggetto per il nostro dominio che è validato
con le gamme consentite o qualsiasi altra cosa per
questi angoli e ho scelto questo esempio
solo per evidenziare qualcosa come
banale e semplice come un angolo merita
il suo dominio
e quindi la convalida o l’altra
andare in giro e perché no, è facile
economico per creare oggetti che non hai
preoccuparsi di un costo o spese generali
questo e riceverai la convalida
ovunque così la sicurezza guidata dal dominio
Elementi essenziali che il sistema di tipi garantisce
è necessario utilizzare l’ oggetto dominio corretto
non siamo noi non stiamo passando in numero intero
stringhe qualunque cosa possa essere e
qualunque sia il numero intero o stringa che deve essere
quel tipo di oggetto così che sta usando il
digita il sistema e conosci per convenzione
tutti gli oggetti del dominio sono validi e di
Certo, ci sono ancora regole di business
ma non devi preoccuparti per il
blocchi elementari come la fondazione di
la tua domanda quelli sono ancora validi
quelli sono sempre validi e il bene
cosa con quando fai come un recensore
software sai che ti sei dimenticato di
convalidare qualcosa se vedi primitivo
i tipi che vengono passati sono solo tu
supposto di vedere gli oggetti del dominio così
rende davvero difficile vedere scusa davvero
facile vedere dove hai dimenticato di fare
validazione e solo una cosa che
Mi piace calzare questo dominio
discussione di sicurezza guidata stiamo parlando
su oggetti di dominio come null
domanda
non usare null mai e poi lasciare null carry
informazioni e cosa intendo con questo
null è un errore
null è solo un modo che dobbiamo avere
denota che qualcosa non sta indicando
tu per qualsiasi cosa intendo tu lo sai
dì che questo non è stato
assegnato è come una cosa che dobbiamo
trattare con linguaggi orientati agli oggetti
e non dovresti mai vedere nulla nel tuo
codice ad eccezione di assegni null nel tuo
oggetti di dominio se sei se lo sai
paranoico con la tua convalida perché se
se simili usi cattivi tipici di null è quello
vuoi indicare questo qualcosa
non esiste oh non ho potuto trovare questo
oggetto dal database, lo farò
return null non farlo perché null
porta a codice difficile da leggere e null
eccezioni puntatore dove non è possibile
separare uno stato di errore da a da a
stato normale nella tua applicazione quindi se
vuoi indicare che qualcosa fa
non esiste usare qualcosa come opzionale di
È in Java otto ora è davvero
cosa semplice in cui puoi scrivere
c-sharp pure perché piace passare
ritorno
è come restituire un sacco di cani in fiamme
cacca va bene se i clienti dei cappotti
riuscito a non essere bruciato da questa borsa
sono ancora lasciati con questo disgustoso
oggetto puzzolente che poi devono
trattare con il giusto basta stump o
qualcosa
quindi non essere quella persona che ritorna
null l’altra volta quando potresti star bene
sentirsi inclini a restituire la conoscenza allora
capisci questo, questo non dovrebbe succedere
Dovrei davvero trovare questo oggetto
Mi limito a restituire null no, basta lanciare
non essere un pollo se questo è un
circostanza eccezionale nella tua
l’applicazione usa bene il nome appropriato
eccezione e l’eccezione
sai cosa il mondo non sta andando
esplodere perché lo fai così ecco qui
proprio come sarebbe la classe opzionale
come in c-sharp è generico che possiamo
creare devo chiedere è presente
Sì, allora ottieni il valore se cerchi di ottenere
il valore con esso così per qualcosa
questo non è presente, allora ti capita
ottenere un’eccezione
quindi se vedi gente brutta là fuori tu
sapere che c’è qualcosa chiamato il
tipo nullable come si può usare per
tipi primitivi che sono veramente utili
se hai a che fare con database che sono
il caso d’uso per gli orologi che è ciò che è
destinato, perché i database trattano in
intrinsecamente con null così potrebbero
restituisce null ed è davvero un bel modo
di fare questo, ma non è lo stesso
come opzionale perché qui è solo un altro
modo orribile di assegnare null adesso a a
tipo primitivo che puoi ottenere
come null 2.0 nella tua applicazione quindi
usa questo solo ai margini del tuo
applicazione al database o all’interfaccia utente
strato ma può rimanere utile per l’interfaccia utente
widget come il pulsante radio on / off non impostato
qualsiasi tipo di cosa quindi per favore non farlo
Metti questo nella tua domanda
corretto oggetto opzionale invece così bene
questo è tutto per noi
parlato del dominio di fiducia in cui ti trovi
la sicurezza e ho intenzione di parlare di
un altro modello ora che si concentra sul
Confida il confine stesso perché forse lo è
chiamato il modello non fidato dove make
fidati del primo concetto di test alla fiducia
confini la cosa con dominio guidato
sicurezza è grandioso dovresti usarlo se
puoi ma forse se ci stai provando
lo introduce in un progetto legacy è
chirurgia maggiore potresti non avere nemmeno un
oggetto di dominio affatto
giusto un modello di dominio a tutti così
dove dominio Durham e sicurezza è
difesa come in profondità ovunque
il modello non fidato è più di un perimetro
difesa dove vuoi solo alzarti
dove il confine di fiducia è così
chiaramente è visibile nel codice, quindi facciamolo
dai un’occhiata a questa funzione siamo a
confine di sicurezza qui ci vuole un po ‘
la barra di input proviene da non attendibili
lato del confine di fiducia e che fanno
qualcosa con la funzione è quindi su quello
lato fidato e la cosa che vedi qui
che non puoi davvero vedere la fiducia
confine diritto non si sporge yeah
stiamo facendo la validazione ma così tu sai
qualcosa è non sicuro probabilmente ma
non c’è davvero modo di dire dove
il limite del trust buck è così utile
modo se non vuoi, se vuoi
vuoi che il tuo codice sia quasi come
bytecode compatibile è giusto per rinominarlo
questo è abbastanza efficace
trucco se stai facendo come il lento
refactoring per trovare il tuo
confine di sicurezza basta rinominare il tuo
variabili di conseguenza se qualcosa è
non fidato perché mettere un underscore non fidato
di fronte a lui so che questo viola il
linee guida per la denominazione ma hey è carina
utile in modo che tu sappia semplicemente ignorare questa regola
nel tuo IDE o chi si lamenta così del
la cosa buona ora è che quando guardi
una funzione qui hai quest’altra
funzione ci vuole una barra non sicura e
si fida di te e proprio come nel
esempio di spline angle sai cosa succede
con i dati di come ci fidiamo di cui ci fidiamo
ovviamente perché non dice
inaffidabile prima così ora è davvero
facile vedere che abbiamo dimenticato di convalidare
l’array di byte di dati che è probabilmente
male perché è pieno di buffer
trabocca o qualsiasi altra cosa sì, si può
fare un passo avanti hanno il
metodo di validazione restituisce le barre e
lo rende un po ‘più ordinato ma possiamo
fare meglio di questo c’è davvero
nulla che ci costringa a fare la convalida
qui a destra potremmo semplicemente prendere il
non affidabile e basta assegnarlo al bar solo
passalo a fare qualcosa con la funzione
nessuno sarebbe più saggio, e se noi
fai questo questo è il modello non attendibile
qui possiamo usare il tipo system e make
è un oggetto generico che sto dicendo generico
la cosa giusta sì sì, io sono generico
i miei modelli in c-sharp ma lo sono
i generici qui si scusa, quindi avvolgi i nostri
valore in un contenitore non affidabile e noi
voglio farlo in modo che l’unico modo per
ottenere il valore di questo non sicuro
il contenitore è fare la convalida così sono
ti mostrerò come farlo in
c-sharp diamo un’occhiata a questo è
come sarebbe la classe non fidata
e vedi qualcosa di strano per questo
qualcuno lo vede è sembra questa classe
utile come ottengo come ottengo
il valore fuori da questo perché il getter
è privato, quindi sembra impossibile
non riesco a ottenere il valore da questo
scatola non attendibile che abbiamo chiusi in
bene in c-sharp c’è qualcosa
gli assembly assemblati chiamati sono come a
jar archivia l’unità di imballaggio in c-sharp
e c’è qualcosa chiamato assembly
direttive che è come il manifest
file per il file jar fondamentalmente e
c’è una direttiva di assemblaggio chiamata
internals miss internals visibile a dove
puoi dichiarare che tutti gli interni
le variabili private di questo
il montaggio dovrebbe essere visibile a tutti
in questa altra assemblea, quindi cosa succede se noi
avere un assembly chiamato validation e
l’assembly di convalida ha un validatore
classificare il DES validare di T e poi
restituisce il valore se è valido
altrimenti gira su una convalida
eccezione e implementatori un validatore
sostituirebbe quindi il metodo del modello
interno convalidare per fare il reale
validazione così qui può il validatore
effettivamente ottenere il valore a causa del
interni visibili alla direttiva quindi
sarebbe simile a questo
otteniamo un non trusted di stringa o il
numero di conto è che abbiamo due nuovi fino a
numero di conto convalidatore e chiamata
convalidare e quindi pop otteniamo il fidato
valore convalidato al di fuori di esso
non c’è altro modo per noi di ottenere il
numero di conto verso il non attendibile
contenitore quindi non possiamo tecnicamente noi
non posso dimenticare che abbiamo messo il nostro
camicia di forza su noi stessi e abbiamo
per fare la validazione che è grande di
Certo che possiamo fare un validatore del nulla fare
è destinato a comparire nel progetto
prima o poi, che ci limiteremo a tornare
senza fare la convalida ma almeno
sai che stai imbrogliando giusto così
creare questi audit non attendibili di cui abbiamo bisogno
qualche codice per la mappatura della colla, ne abbiamo due
rinnovare questi non fidati e poi solo
ricordati di passarli all’at
il confine non fidato non è molto
elegante un po ‘goffo sarebbe
bello se questo è successo automaticamente in
il per quanto ne so non può davvero
essere fatto in c-sharp a meno che non ti affidi
alcune funzionalità di framework come asp.net
legatura del modello puoi prendere i tuoi valori
e poi sempre come avvolgerli nella tua
legatore di motori e passarli ad Assam
fidato o che potrebbe essere semi utile
perché la validazione è davvero buona
asp.net e vediamo comunque, ma abbiamo
tutti i programmatori C ++ qui nel chrome
Sì, va bene lo schema non attendibile
è più elegante in C ++ perché è C ++
qualcosa chiamato costruttori impliciti
e amici classi un amico classi
significa che non devi dichiarare
che l’ambito del pacchetto puoi dire a
l’ambito di applicazione alla classe che questo dovrebbe
questo dovrebbe essere accessibile al validatore
istanze e costruttori impliciti
significa che non hai bisogno di questa colla
codice puoi semplicemente dichiarare i tuoi input come
non affidabile o e quindi c ++ il compilatore
capiremo che c’è un percorso
attraverso il costruttore non affidabile a
l’oggetto che fa un sacco di persone
odio costruttori impliciti che è
davvero complicato ma è molto utile
in questo caso lo lascerò come un
esercizio per il lettore da implementare
questo in C ++ così giusto che è quello
modello non attendibile di nuovo guidato dal dominio
la sicurezza davvero buona dovrebbe essere il
metodo preferito, penso che se non puoi farlo
prova il modello non fidato anche da
rinominando o semplicemente facendo il modello di
Completa così come ho detto prima
immutabilità che è davvero un bene
cosa e abbiamo parlato molto della fiducia
e cosa abbiamo bisogno di convalidare qualcosa
prima di poterci fidare ma cosa succederebbe se
qualcosa può cambiare dopo averlo convalidato
quando è dentro la nostra cerchia di fiducia
come possiamo fidarci allora è stato
cambiato non abbiamo più convalidato
giusto quindi non importa se andiamo dal
fuori dall’interno
nel cerchio della fiducia o dal
dentro verso l’ esterno quando passi
qualcosa fuori gli oggetti che passiamo
oltre il confine di fiducia dovrebbe essere
immutabili non dovrebbero essere in grado di
cambiare altrimenti puoi farlo con intelligenza
le condizioni di gara bypassano la tua convalida
quindi diamo un’occhiata a questo forse
la tua applicazione gestisce la concorrenza
probabilmente se stai facendo il tuo web
applicazione hai centinaia di thread
come influisce sulla tua convalida il
cosa che hai appena convalidato è ancora
valido quella è la domanda principale così noi
ho parlato di parlare al momento del check-in
tempo di utilizzo e tutti voi avete visto questo
forse senza pensarci ecco a
metodo tipico metodo Java che
trasferisce un po ‘di denaro e prima di tutto
controlla che l’account contenga questo
importo e poi lo trasferisce in caso contrario
ottieni un’eccezione di convalida, quindi noi
avere un tempo di controllo toc e un tempo di
usa tou
ma cosa succede se un altro thread modifica
importo tra il tempo di controllo due volte di
usa allora sai che diventiamo milionari
qui quindi il problema è che possiamo inviare
se l’importo dell’oggetto non è immutabile
allora possiamo passare un oggetto di quantità
che passa la validazione ma poi è
cambiato e modificato prima del reale
l’uso di ciò accade naturalmente
lasciaci vulnerabili a un attacco
quindi la soluzione è ben immutabile
se la quantità dell’oggetto appare così se
abbiamo una finale qui il valore non può essere
cambiato e non c’è setter ma siamo
buono nulla può cambiare tra il tempo
di controllo al momento dell’uso in modo da sbarazzarsi
di questi setter giuste notizie finali o
read-only in c-sharp immutability is
fantastico che tu sia significativamente ridotto
il discorso ai problemi suona molto bene
con sicurezza basata sul dominio come I
menzionato e leggibilità
approvvigionamento di eventi di parallelizzazione ecc. ecc
l’immutabilità dovrebbe essere la norma
dovresti lottare per quello che dovresti
dovrebbe essere così abituato che quando tu
vedere un oggetto mutevole qualcosa che può
modificare
dovresti solo oh dovresti sentirti male
e prova a contenerlo e spostalo
altrove
prendiamone un altro
ottenere una condizione di gara qui quanti di
sai in qualche modo una condizione razzista
mani in ordine, va bene, è così così
quando quando dipende qualche uscita
la sequenza o il tempo o altro
eventi incontrollabili che è una gara
condizione e nel software web è
in genere rispetto ai thread di richieste Web
giusto che gareggiare gara per l’accesso a un
risorsa così lontana dal portare a a
bug super hard come bug heissen che
non puoi eseguire il debug non puoi ottenere questo
quando fai il debug, usa spesso, allora
si tratta di un problema di sicurezza come pure immaginare
questo hai un che stai facendo è come un
carrello della spesa un mago ci sono tre
passi in cui l’utente entra per la prima volta
procedura guidata sceglie un prodotto e quindi controlla
qui abbiamo una mappa statica del
dati che dobbiamo assegnare a ciascun utente ciascuno
l’utente ha un identificatore che è dire griglia
o un UUID nell’identificatore univoco Java e
tutte le persone a conoscenza della concorrenza nel
pubblico vedi la parola chiave statica e
sei come non lo farei mai
statico lo sai in una app web che sei tu
sapere l’elemosina per problemi ma questo
potrebbe anche essere un servizio se ne hai uno
contenitore di iniezione di dipendenza forse
il tuo servizio è un singleton, quindi questo
sarebbe solo un’istanza regolare
variabile che sarebbe lo stesso
perché sarà condiviso da tutti così
è solo statico per l’ uso del
esempio qui così bene passo uno l’utente
entra nel wizard viene assegnato un nuovo a
identificatore univoco prendi alcuni dati e
ottiene l’identificatore restituito e passo
due otteniamo la chiave e la query
stringa probabilmente dall’utente e quindi
ora l’utente ha scelto un prodotto così
okay aggiorniamo i tuoi dati della procedura guidata con
questo ID prodotto e poi nel terzo
passo qui è come un passo di verifica noi
ottenere i dati dalla nostra mappa e
controlliamo che l’utente abbia accesso a
questo ID prodotto e se lei ha signore lui
allora abbiamo fatto qualcosa con esso così fa
chiunque veda cosa potremmo fare qui, che cosa
l’utente malvagio potrebbe fare cosa se ciò che accadrebbe se noi
martellare l’applicazione con la fase di invio
due richieste ad esso
mentre stiamo facendo il checkout noi
capisco, questo non lo è
inverosimile pensare che va bene al passo
tre capisco che qualche convalida
sta succedendo perché non posso scegliere questo
idea segreta che in qualche modo ho imparato
a proposito , forse c’è il discorso
vulnerabilità qui mi limiterò a mantenere
bombardando la mia applicazione con la fase due
richiede mentre faccio il passaggio tre forse
Sono fortunato e inietterò subito
tra qui e otterrò davvero
accesso a questo ID prodotto segreto in modo che
soluzione del corso è quello di rendere i dati
immutabile quindi abbiamo di nuovo l’esempio
sembra esattamente lo stesso, ma abbiamo
qualcosa chiamato dati immutabili ora
invece il primo passo è lo stesso il
il secondo passo qui è la differenza
invece di solo un segno di cambiare il
ID del prodotto sul nostro oggetto esistente noi
non possiamo farlo più abbiamo un
oggetto immutabile immutabile che dobbiamo
creane uno nuovo in modo da averne un po ‘
metodo di convenienza sui dati immutabili
oggetto chiamato clone con nuovo
ID prodotto Immagino che dovrebbe essere chiamato
quindi ci vogliono tutti gli altri campi che sono
che i dati ha un sacco di campi in esso
e clona quelli e assegna un nuovo
ID prodotto e quindi lo inseriamo nel nostro
nella nostra mappa e il terzo aspetto
esattamente lo stesso abbiamo ancora tempo
di controllare il tempo di utilizzo non possiamo mai
fuggire da quel diritto ma ora i dati lo sono
immutabile non importa quanti gradini
due richieste mi bombardano nel mezzo di
ci sto solo andando ad assegnare un nuovo
oggetto e la convalida e il
controllare e l’uso sarà sempre
eseguito sugli stessi dati così
immutabilità non risolve tutto il
problemi nell’universo, naturalmente, ma
è che puoi considerarlo come un
spruzzo di sicurezza rende il codice molto
più facile da capire molto più robusto
e dovrebbe come ho detto che dovrebbe
sarebbe davvero una buona ragione che dovresti avere
un buon motivo per non fare il tuo
dati immutabili dovrebbe essere la norma
oggetti mutevoli qualcosa che può
il cambiamento dovrebbe essere contenuto isolato e
solo colpito con un bastone
quindi perché un sacco di tempo lo mescoli
hai un oggetto con molto
proprietà e molti di loro non lo faranno mai
cambia bene, allora sai come calcolare un
oggetto immutabile di ciò che mette il mutabile
stato e un altro oggetto che solo tu
tocco in certi momenti certi rende
tutto molto più facile e molto di più
sicuro dovrebbe essere la norma
si tratta di immutabilità parliamo
sul modello finale qui qualcosa
ha chiamato il modello inverso del coach della vita
e per capire l’inverso allenatore della vita
modello dobbiamo prima guardare al
allenatore di vita anti-modello così la vita
allenatore anti-modello va qualcosa di simile
questo è il life coach che ti parla
non hai ancora fatto niente, amico mio, ma tu
sono già un successo, non importa
quello che succede nel mucchio di codice lo farai
avere successo e anche se non lo farò
ancora ti carica è fantastico essere un
life coach quindi se per qualche ragione tu
erroneamente uscire da qualche parte nel mazzo di
codice e avere prima e non hanno detto
successo a false tornerai successo
vero che è sbagliato giusto perché
non c’è stato un successo e questo è un
gran parte del bug fallito
si potrebbe sentito parlare di quello che è successo a
OS X che ha reso la validazione TLS in OS X
scomparire che hanno aggiunto la formica
la vita scusa allenatore un life coach e a
pattern insieme ad alcuni duplicati di dub
istruzioni goto quindi cosa dovresti fare
e naturalmente l’allenatore della vita inversa
bene, supponi che tu non sia un fallimento
successo devi dimostrarti
mazzo di codice e forse se sei veramente
abbastanza bene hai davvero quello che serve
certo, vai avanti e torna da solo
un successo ma possiamo fare meglio questo è
come un esempio di come stiamo usando a
linguaggio orientato agli oggetti probabilmente
il modello tipico sembra così falliamo
veloce come proviamo a controllare e assumere
fallimento e gettare un’eccezione se noi
c’è qualcosa che non va, può esserci un mucchio
di queste affermazioni se non ha asse se se
non conosci l’account consentito
operare con questo metodo se non se non se
non dovrebbe essere davvero difficile da percorrere
attraverso questo per andare davvero in a
mazzo di codice e poi se siamo contro tutti
probabilità’
farsi strada attraverso un mucchio di codice
quindi sicuro
ritorno non ti restituiamo un successo
sapere ha fatto ha funzionato vero o falso
no, si dovrebbe restituire solo un adeguato
oggetto dominio l’unico modo di uscire
questa funzione è o di esplodere in un
eccezione o attraverso una molto stretta
percorso impegnativo percorso di successo finisce
con un oggetto dominio valido dovresti
sai che dovresti immaginare la funzione
come l’Oceano Atlantico e tu sei un
Frenchman bruciato dalle bruciature del sole che
deve attraversare il windsurf è così
stretto è quello il percorso del successo
okay, quindi non c’è modo per te di uscire
questo senza avere un oggetto valido siamo
pronto per avvolgere le cose mi rendo conto
Sto parlando molto velocemente ma hey quello è
come va a volte
Voglio che ci siano cinque cose
che voglio che tu ti porti a casa con te
da questa sessione
il primo è considerare la tua fiducia
confini dove stai posizionando il tuo
fiducia
pensa al cerchio della fiducia
tutto al di fuori è di fiducia che hai
questo piccolo sottoinsieme all’interno è affidabile
e la convalida è l’unico modo di
sapendo questo dove se i tuoi dati sono validi
o no
o fidato, quindi pensa davvero a questo
dove stai mettendo la tua fiducia e
minimizzare la fiducia, naturalmente, dovresti
provate davvero la mangiatoia di insicurezza che è
facile è semplice in quanto potrebbe sembrare
quasi banale lo sai, certo
metti un po ‘di validazione nel tuo
oggetti rimanenti, ma accoppialo con
la mutabilità
e lo stiamo usando da un po ‘di tempo
solo che è così grande, perché sai che il tuo
gli oggetti sono sempre validi e puoi
prendi i tuoi bug molto presto e tu
non devi davvero ottenere un po ‘
agganciato alla convalida che vuoi di più
convalida così e tu se vedi un
il tipo primitivo passato a disegnarti
come oh, che cosa è questo non è attendibile
è così facile basta cambiare per la
oggetto principale dà una grande difesa in
profondità e come ho detto un paio di volte
l’immutabilità dovrebbe essere la norma che cerco di fare
isolare il tuo stato mutabile se vedi
qualcosa di mutabile dovresti sentirti male
qualcosa con setter giusto è
orribile cerca di contenerlo e minimizzarlo
è diffusa perché forse te ne rendi conto
che usando
bisogno di quella flessibilità per avere mutabile
dichiari che puoi ucciderlo, sì, non molto
da dire su questo no questo un errore
è un puntatore non valido non assegnato
qualsiasi altro significato a null okay
non è la vita diventa così molto più facile
quando non passi in giro ora non lo fai
deve fare ora controlli non è necessario
vedi quella brutta parola null ovunque sia
appena andato devi dimenticartene
dormirai meglio di notte
tutto è meglio usare opzionale di T a
indica i valori mancanti se manca
il valore è una cosa eccezionale perché buttare
un’eccezione e tu sai guardare il
il mondo brucerà sarà fantastico
spara al tuo allenatore di vita essere un pessimista
supponiamo che tu non sappia il sentiero stretto per
successo si wind surfing attraverso il
Atlantic sei un sunbird francese bla
bla bla è così
gente spero che vi sia piaciuto e che tu
ho imparato qualcosa di nuovo e puoi candidarti
questi modelli e concetti immediatamente
quando torni alla tua programmazione
attività
Non essere timido esitate a contattarmi I
ho come sette tweet lì, ma se tu
twittare ricevo una e-mail così poi io ti conosco
mi hai twittato, voglio solo collegarlo
questo un po ‘rapidamente qui c’è un
security de conference in novembre a
Malmo solo attraverso l’acqua alcuni davvero
roba interessante lì è in ordine
li a controllare e per favore ricorda
valutare questa sessione e abbiamo circa
13 minuti per le domande quindi non essere timido
– Hai delle domande grazie, hai detto
anche voi non che spesso non è
ecco perché sono così utili, voglio dire che lo è
è II piace parlare è facile
essere come scoraggiato quando si pensa
sicurezza, credo che tu pensi oh, oh, tu
sapere che non importa se faccio questo o
non perché sai se qualcuno vuole
possono ancora hackerare la mia applicazione ma
non è vero, non è proprio vero, sicuro
se sono come uno stato-nazione è dopo
tu l’NSA o qualunque qualcuno qualcuno
chi è veramente esperto e determinato sì
probabilmente possono modificare la tua applicazione
e la tua compagnia o qualsiasi altra cosa tranne te
so che è la regola 8020 con un piccolo
ammontare dell’impatto del 20 percento si ottiene l’80%
del successo, quindi questo è solo corretto
la convalida trova il tuo limite di fiducia
immutabilità cose davvero semplici che è
renderà molto più difficile per il
nella media sai che l’hacker non lo è
andando a dire un paese solo alcuni
da qualche parte per hackerare la tua applicazione
sì quindi farlo è che sia si può veramente
fai molto con piccole cose
sì, mi dispiace che ci sia se ci sei
Conferma di fiducia hai convalidato il tuo
dati ed è attendibile proprio lì
ancora regole aziendali che devono essere
convalidato ma non devi
conferma nuovamente i tuoi dati perché puoi
non fa male ma non devi
perché dovresti dovresti fidarti del tuo
sistema giusto hai un metodo tu
dovresti fidarti, altrimenti lo farai
finire con la convalida un po ‘
sparsi ovunque sul codice o su
il codice ma se lo fai correttamente
allora dovresti star bene se lo hai
qualcosa di super sensibile
forse dovresti aggiungere più strati come se
hai questa parte critica del tuo
l’applicazione non fa male a farlo fare il
convalida di nuovo giusto perché forse
qualcuno cambia questo oggetto là fuori
e poi finisci con dati cattivi qui
così, ma quello che uso io quando lo faccio
la sicurezza basata sul dominio il più possibile
e poi per quelli più sicurezza
cose critiche ho avuto qualche altro strato
proprio come dopo quando stai facendo
la tua carta di credito che elabora qualsiasi cosa
proprio lì, fai ancora un paio di cose
basta essere sicuri cinture e bretelle
penso che ci fosse qualcuno che non va bene
sì sì, io voglio attaccarmi al collo
fuori e domanda che lo adoro
se è davvero se lo è davvero
prestazioni critiche voglio dire non lo so
con cosa lavori ma potrebbe funzionare
Facebook okay ma io voglio solo
attenzione contro come prematuro
ottimizzazione di cui hai davvero bisogno
misuralo e se va bene se lo sai
srotolare una pila e intercettare l’avvolgimento
l’eccezione è troppo costosa per te certo
ma sono stati come parlare
su Java che tutte le eccezioni sono
caro non puoi usarli dovresti
usa Valis di ritorno che è come quindici
anni fa
sai che non si applica più così
ma assicuratevi solo assicurarsi da da
misurando quello è davvero il caso
e poi sicuramente andare avanti e fare qualcosa
altro che cercare di utilizzare di utilizzare questi
eccezioni il più possibile sì
prima di te è piuttosto difficile da fare
quindi diciamo che hai qualche oggetto
hai dieci campi e tu vuoi
cambia un campo quindi devi fare un
costruttore
devi copiare i nove campi e uno
vuoi cambiare si e cosa intendo
quindi non è affatto facile, intendo il nostro
la lingua non è cocaina per immutabilità, quindi
è abbastanza facile dire basta farlo ma dentro
infatti è totalmente difficile che io no
penso che sia così difficile in realtà no
dipende forse se hai dieci campi
forse è troppo forse puoi
refactoring in due oggetti ovviamente è
può essere fastidioso sai farlo ma
puoi usare il modello Builder
invece invece di fare un enorme
costruttore devi chiamarti per fare un
oggetto costruttore che hai impostato è a
schema puoi cercarlo ma io penso
Non credo che sia così difficile non fare
penso di essere sicuro che siano costruiti per
mutabilità non è come un concetto di base
non è un cittadino di prima classe nel
linguaggio ma penso che possa essere usato
con successo senza troppo senza
qualsiasi dolore i benefici sul modo in cui il dolore
non c’è ci sono c’è il dolore sì
ma è un bel dolore spiacente esterno
dipendenza quindi è abbastanza facile da dire
okay una caviglia dovrebbe essere da zero a 90
gradi o qualunque cosa, ma se devi
controllare prima di fare un account lo fa
esiste già allora hai un esterno
dipendenza dai dati
e puoi metterlo dentro l’entità
perché quello sarebbe succhiare voglio dire così è
non così facile come lo metti perché intendo
l’entità ok io ho io sono un valido
intero ma forse qualche altra entità
ho già il mio Mac si, certo
è come il dominio in cui ti trovi
la sicurezza garantisce che il tuo base
blocchi di costruzione sono validi quindi sì di
Certo, devi convalidarlo
avere accesso a questi account e fare
questi solo controlli regolari prima di te
creare il tuo anche creare l’oggetto sì
non si dovrebbe mai chiamare un servizio da
il tuo dominio per oggetto ovviamente non è così
hai ragione assolutamente non copre
tutto ma sicuramente batte il diavolo
senza convalida e o
avendo convalida ovunque così sì
non è un non è il nostro proiettile d’argento
ma è davvero buono, penso bene se tu
non avere più domande
Penso che diciamo solo grazie, va bene, grazie
tu
tu
La compagnia svedese ha chiamato truseq se tu
erano nella sessione precedente sai a
un po ‘ma truseq il mio collega
inviato via email a Kannamma abbiamo parlato di ciò che siamo
situato a Malmö ea Stoccolma in
Svezia ho intenzione di parlare di
schemi di codifica sicuri e per favore
ricorda di impegnarti attraverso il go-to
applicazione e senza ulteriori indugi
Cominciamo così io lavoro al
compagnia truseq, eccoci qui al sud
L’Africa e il nostro viaggio aziendale quest’anno
in realtà ho passato il mio tempo a rusik
sviluppo e auditing della sicurezza
la sicurezza dei sistemi critici è importante
giusto hai bisogno di discuterne non solo
con i tuoi bambini ma con i tuoi colleghi
pure e la cosa con sicurezza è
che è difficile fare affidamento sulla sicurezza su a
progetto quando è quasi finito
ha davvero bisogno di essere parte integrante di
sviluppo perché abbia successo e
oggi parlerò di alcuni
concetti e modelli che ti aiuteranno
nelle tue attività quotidiane di codifica
in particolare parlerò un po ‘ di fiducia
per impostare il palco all’inizio sono
andando a passare al primo schema
si chiama sicurezza basata su dominio e
c’è qualcosa chiamato non sicuro
schema di cui parlerò
immutabilità e lo sarò anche io
parlando di qualcosa chiamato il
inversione del ciclo di vita, quindi prendiamoci
ha iniziato a fidarsi delle fondamenta del software
la sicurezza bene è davvero perché molto
di problemi di sicurezza si riducono a poveri
comprensione di dove noi o il nostro
il software sta ponendo la sua fiducia come facciamo noi
controlla chi abbiamo fiducia come stabiliamo
si fida che questi siano veramente importanti
domande se vuoi fare il tuo
software sicuro quindi diamo un’occhiata a
una tipica interazione che può accadere
ecco qui un uomo d’affari, Bob, lui
in banca vuole trasferire X euro
dall’account Y al conto Z va bene
sapere che cosa potrebbe andare storto questo
è semplice transazione tipica che tu
avere in diverse forme nel tuo
applicazioni qualunque cosa possa essere a
qualunque sia il valore del tuo applicazione potrebbe essere
quindi diamo un’occhiata alla prima interazione
il passo di autenticazione come viene chiamato
come può la banca essere sicura che Bob sia davvero
è Bob e come può la banca essere sicura
scusa, come può Bob essere sicuro che la banca
è davvero la banca di cui stanno parlando
alla festa corretta se guardiamo al
operazione reale che deve essere eseguita
sappiamo che Bob possiede l’ account perché lo fa
conosciamo quell’account perché tiene X euro
e sappiamo persino che X è un numero
queste sono tutte cose che sono nostre
l’applicazione deve gestire diversamente
siamo nei guai perché conosci Bob
potrebbe davvero rovinarci qui o in banca
potrebbe avvitare Bob a seconda di quale lato
sei in questo caso così per
visualizzare la fiducia è piuttosto utile per
pensa alla tua applicazione come a un cerchio
e c’è una cerchia di fiducia e la tua
l’applicazione è al suo interno, così tu hai
tutta questa roba che è al di fuori di
la tua cerchia di fiducia
non ci si può fidare di cui non ci si può fidare
utente la richiesta dati il database che
sa cosa c’è lì dentro è il tuo
domanda responsabile della messa
tutto lì dentro forse non a terzi
servizi ecc ecc in modo da ciò che è necessario
capire quale deve essere la tua applicazione
capire è dove i confini di fiducia
sono nel tuo codice da dove inizia la fiducia
dove finisce la fiducia e io vado
scusarsi in anticipo per questa prossima diapositiva
potresti voler coprire i tuoi occhi solo io
voglio davvero martellare a casa questo punto
su ciò che è affidabile e non affidabile
tutto ciò che è all’interno del cerchio è affidabile
tutto al di fuori non è affidabile e
noterai alcune cose a riguardo
soprattutto quanto più grande è il non fidato
area è loro la loro fiducia e
importante che sia illimitato il
fidato è molto limitato e specifico te
può enumerare tutti gli stati fidati
mentre il non fidato è illimitato e
si sa in un modo poco pratico è
imposto
è per enumerare gli stati che possono
capita e questo è il motivo per cui l’ascolto è nero
non funziona quando si tenta di enumerare
la roba che non è permesso devi
fare la lista bianca ed elencare la roba
è permesso ciò di cui ti fidi
così bene come fa qualcosa dal
lato non attendibile diventare fiducia dopo tutto
dobbiamo interagire con tutte queste cose
altrimenti la nostra applicazione è carina
inutile così attraverso ogni sviluppatore
convalida attività preferita che è il
cosa più divertente da fare quando sei
sviluppare un diritto di applicazione che è
la prima cosa che inizi con te
sparato per iniziare con la convalida così
spero che dopo questa sessione lo farai
almeno penso che faccia un po ‘meno
quanto si faceva prima così bene due cose
può accadere, naturalmente, sia la
passate di validazione ci fidiamo dei dati o
non ci fidiamo e lo rifiutiamo così
lo teniamo fuori dalla nostra cerchia di fiducia
e se stiamo parlando di validazione
solo per definirlo un po ‘di più
è il tipo tipico di convalida che
probabilmente pensi di assicurarti che
i dati che ottieni sono validi nel tuo dominio
come è X anche un numero un altro i dati
quello è Bob quando è trasferito al
banca o qualunque altra cosa
nomi di fantasia canonicalizzazione o il mio
roba che deve accadere prima
la convalida qui è un tipico esempio di
normalizzazione in cui si ottiene un percorso di file
forse ami le persone per caricare materiale in
o scaricare qualsiasi cosa dal file pubblico C
caricare e se solo il tuo programma
convalida l’inizio di questo su a
percorso normalizzato allora tu dici che va bene
è il caricamento di file pubblici in C ma tu hai un
percorso traversal attacco lì con un punto
punto barra che taglia il sistema operativo allora
collasserà due chiavi segreti che
beh, ovviamente, da qualche parte non vuoi
l’utente che cerca dove sono
file caricati o scaricati qualunque cosa sia
la normalizzazione deve avvenire prima
convalida allora vedi perché lì
c’è qualcosa di igienizzante in te
ripulire pericolosi dati sconosciuti tipici
log injection Sono disposto a scommetterlo
quasi nessuno di voi sta facendo la sanitizzazione
conosci i tuoi dati di registro perché è così
comune quando lo facciamo revisionare così tutto
non prendi un certo valore ed è
non si inserisce nel tuo dominio si registra il
errore dire che ho ricevuto alcuni dati non validi
questo è quello perché fa bene
controllo degli errori o debugging in seguito
quindi l’utente può iniettare voci di registro
nel tuo registro che potrebbe fare come
procedimenti giudiziari più difficili in seguito, se tu
può mettere in discussione il log in modo che sia qualcosa
a pensare se l’utente sa cosa
tipo di formato di registro è possibile iniettare il male
registra le voci e confondono il tuo debugging
o controllo degli errori in seguito mi scusi
parlato ha toccato questo prima di sempre
preferisco l’elenco bianco sopra l’elenco nero
perché bene l’area rossa è illimitata
e l’area verde è limitata a destra
non puoi enumerare tutti gli invalidi
roba e un’altra cosa buona dell’essere
rigoroso con la convalida è che trova
bug presto a destra invece di averne un po ‘
errore come 8 passi giù nel codice e
devi passare un giorno lo sai
rilevamento, ma come è finito?
qui vicino al database e tu giri
fuori che è un numero che si sa
negativo invece di positivo qui
che avresti potuto prendere molto presto
qui nell’interfaccia utente quasi la strada
applicazione quindi non è solo per
sicurezza ti fa risparmiare tempo e tempo
mal di testa e te ogni volta che fai
validazione ogni volta che si ha a
parametro qualcosa che devi convalidare
devi chiederti qual è il
il più ampio intervallo accettabile e poi no
accetta più di quanto non pensi
beh sai forse tra sei mesi
sapere che le persone trasferiranno queste grandi
importi o forse sai che cambieranno
il tempo di scadenza ancora qualche anno in più
su queste carte di credito lo metto appena
lì dentro quindi non dobbiamo fare un
aggiornamento sai che non farlo è solo essere
davvero severo e se devi cambiare
aggiorna il tuo software che è meglio così
confidiamo che in generale è il
fondamento della sicurezza del software e
passiamo al primo schema qui
lo facciamo
sicurezza basata sul dominio quanti qui
ho sentito parlare del design guidato da domini
mani in alto per favore va bene, è buono
non è davvero complicato questo sei tu
modella sempre il tuo dominio come con
oggetti propri che interagiscono e sono
creato in modi speciali, quindi non lo è
complicato ma puoi cercarlo se
non avrai bisogno di sapere di più che il
termine o questo modello guidato dal dominio
sicurezza ci aiuta con una fiducia
confine e ci dà la convalida
ovunque in un buon modo
e il modello è stato coniato da due
sviluppatori della società svedese Omega
Point Yann villain de Oak e l’alba di
yunsun così dominio durante la sicurezza è
fondamentalmente il principale design urbano plus
alcune convenzioni per in patata
convalida che daremo un’occhiata
ora torniamo al nostro
l’interazione con Bob in banca è qui
Bob di nuovo, quindi questa è una nuova transazione
entrambi la banca si fida di lui e già
poi si dimentica di convalidare e Bob vuole
trasferire un negativo di 1.000 euro sicuro
Vai avanti
l’accattivante Bob si presume essere quasi
Svedese svedese mille euro
kroner o nota in tasca lì così
il problema con la convalida è quello
la stessa validazione deve sempre essere
eseguito più e più volte e questo è
Probabilmente è per questo perché è facile dimenticare di
convalidare da qualche parte perché non è possibile
vedo davvero la foresta per gli alberi e
finisce ovunque e il codice se
non si riesce così è lì
probabilmente è per questo che è così facile
dimenticalo perché lo vedi ovunque
e poi se manca in un posto
è difficile è facile perdere ed è così
facile dimenticare che è necessario anche
convalidare da fonti interne pensare
fonti che pensi non possano darti
dati errati come il tuo database per
esempio intendo sicuramente che lo ritieni valido
hai igienizzato e convalidato tutto
che entra quando viene di nuovo
conto posso davvero fidarmi bene c’è
qualcosa se non hai correttamente
validato se se o se sono l’attaccante
è davvero intelligente possono archiviare gli script
ad esempio lo scripting cross-site è un
tipico attacco web in cui un aggressore ha
stato in grado di inserire del testo di script
il tuo database e poi lo mostri su a
pagina forse dico che il nome utente è a
script e quindi alcuni JavaScript ottiene
eseguito e quindi puoi attaccare
altri utenti con questo script, quindi se andiamo
torniamo alla cerchia di fiducia che abbiamo qui
convalida di un primitivo
tipi come stringhe e interi che puoi
essere sicuro anche se ti ricordi di
la validazione ovunque ma è dura
guardare una variabile nel tuo
oggetto dell’applicazione per vedere se è stato
se è di fiducia o meno se hai a che fare
con tipi primitivi perché guardano
proprio come qualsiasi altro tipo cosa
la sicurezza basata sul dominio dice che è così
tipi primitivi e strutture dati sono
non attendibile per impostazione predefinita se viene visualizzata una stringa
e integer un array di byte una collezione di
qualunque cosa venga passata in un pubblico
funzione o restituita da una funzione attivata
il tuo oggetto allora che i dati non sono attendibili
e tu non dovresti davvero vederlo
lì perché dovresti vedere solo il dominio
oggetti che spiegherò di cosa si tratta
oggetti di dominio per convenzione nel dominio
durante la sicurezza hanno convalida integrata
il che significa che non possono essere istanziati
senza essere convalidato internamente
prima se la convalida non supera un
l’eccezione è lanciata e l’oggetto Kadim
anche essere creato quindi vediamo qui hmm così
nella nostra cerchia di fiducia, lo faremo
mai vedere stringhe e interi
passato intorno avremo solo corretto
dominio oggetti come la corda avrebbe
probabilmente corrisponde ad un oggetto account
un numero di conto un numero intero può essere un
importo oggetto che è quindi correttamente
convalidato e la cosa buona con
la sicurezza basata sul dominio è questo
Ottieni automaticamente la convalida dei dati
ovunque non è solo dove pensi
che oh, ecco il confine di fiducia in cui mi trovo
un servizio web c’è un limite di fiducia
qui mi ricordo di convalidare l’input
i dati lo conoscono ogni volta che ci provi
istanziare un oggetto dominio è
convalidato e ne prendi immediatamente uno qualsiasi
dati malvagi o fuori dai limiti
che entrano così è la convalida
ovunque non nei luoghi dove tu
aspettati solo che i dati cattivi appaiano
perché è difficile capire dove
tutti i dati cattivi appariranno quindi ecco a
tipico oggetto dominio quindi un account
numero che è costruito con un valore
e per convenzione quindi l’ oggetto dominio
è immediatamente validato alla creazione
quindi non c’è modo per noi di finire
un oggetto dominio non valido qui e
un altro non necessario ma molto utile
cosa con con questi domini
è se sono immutabili che sto per essere
parlando di immutabilità più tardi
è fondamentalmente che loro non possono
cambia lo stato interno dell’oggetto
non può cambiare dopo che sono stati
istanziato in modo da vedere quella stringa il
il valore qui è un finale e questo è Java
l’ultimo significa che non può essere impostato
di nuovo e non c’è setter per il for
questo valore solo un rapido mani su come
molti stanno programmando in Java qui tutto
destra
c-sharp okay e gli altri vanno bene
Sì, va bene quindi è una buona partita allora
perché ci sarà un po ‘di Java e
gli esempi c-sharp qui si raffreddano proprio tutti
l’oggetto dominio è la procreazione convalidata
non c’è modo per noi per convenzione
finire con un oggetto dominio non valido noi
ovviamente, ricorda di farlo
validazione in ogni oggetto dominio ma
dopo un po ‘diventa una seconda natura
quando fai il tuo oggetto quindi torna da noi
abbiamo un esempio abbiamo un servizio web
da cui vengono prelevati alcuni dati di sapone non attendibili
all’esterno lo convalidiamo otteniamo un utente
oggetto conteggio oggetto che qualunque cosa ma
quando avremo alcuni dati non validi lo faranno
rimbalzare come un’eccezione e noi
non dobbiamo preoccuparci di poter essere felici
questa è un’altra cosa con questo è quello
questi tipi primitivi se ti dimentichi di
fallo davvero fuori così eccoci qui
avere una funzione reticolare che richiede a
spline e reticolato un certo angolo
quindi sai cosa succede con l’angolo è un
intero bene, non è un oggetto dominio
non possiamo non fidarci di questo è l’angolo
dovrebbe essere negativo
qual è l’intervallo consentito di angolo forse
possiamo solo reticolare alcuni angoli per
lo sai di sinistra e di destra qualunque sia
qual è l’intervallo consentito nel nostro dominio
ora la funzione reticolare deve
ricorda di eseguire questa convalida così
ovviamente questo è come dovrebbe essere
sembra che dovremmo avere un’angolazione corretta
oggetto per il nostro dominio che è validato
con le gamme consentite o qualsiasi altra cosa per
questi angoli e ho scelto questo esempio
solo per evidenziare qualcosa come
banale e semplice come un angolo merita
il suo dominio
e quindi la convalida o l’altra
andare in giro e perché no, è facile
economico per creare oggetti che non hai
preoccuparsi di un costo o spese generali
questo e riceverai la convalida
ovunque così la sicurezza guidata dal dominio
Elementi essenziali che il sistema di tipi garantisce
è necessario utilizzare l’ oggetto dominio corretto
non siamo noi non stiamo passando in numero intero
stringhe qualunque cosa possa essere e
qualunque sia il numero intero o stringa che deve essere
quel tipo di oggetto così che sta usando il
digita il sistema e conosci per convenzione
tutti gli oggetti del dominio sono validi e di
Certo, ci sono ancora regole di business
ma non devi preoccuparti per il
blocchi elementari come la fondazione di
la tua domanda quelli sono ancora validi
quelli sono sempre validi e il bene
cosa con quando fai come un recensore
software sai che ti sei dimenticato di
convalidare qualcosa se vedi primitivo
i tipi che vengono passati sono solo tu
supposto di vedere gli oggetti del dominio così
rende davvero difficile vedere scusa davvero
facile vedere dove hai dimenticato di fare
validazione e solo una cosa che
Mi piace calzare questo dominio
discussione di sicurezza guidata stiamo parlando
su oggetti di dominio come null
domanda
non usare null mai e poi lasciare null carry
informazioni e cosa intendo con questo
null è un errore
null è solo un modo che dobbiamo avere
denota che qualcosa non sta indicando
tu per qualsiasi cosa intendo tu lo sai
dì che questo non è stato
assegnato è come una cosa che dobbiamo
trattare con linguaggi orientati agli oggetti
e non dovresti mai vedere nulla nel tuo
codice ad eccezione di assegni null nel tuo
oggetti di dominio se sei se lo sai
paranoico con la tua convalida perché se
se simili usi cattivi tipici di null è quello
vuoi indicare questo qualcosa
non esiste oh non ho potuto trovare questo
oggetto dal database, lo farò
return null non farlo perché null
porta a codice difficile da leggere e null
eccezioni puntatore dove non è possibile
separare uno stato di errore da a da a
stato normale nella tua applicazione quindi se
vuoi indicare che qualcosa fa
non esiste usare qualcosa come opzionale di
È in Java otto ora è davvero
cosa semplice in cui puoi scrivere
c-sharp pure perché piace passare
ritorno
è come restituire un sacco di cani in fiamme
cacca va bene se i clienti dei cappotti
riuscito a non essere bruciato da questa borsa
sono ancora lasciati con questo disgustoso
oggetto puzzolente che poi devono
trattare con il giusto basta stump o
qualcosa
quindi non essere quella persona che ritorna
null l’altra volta quando potresti star bene
sentirsi inclini a restituire la conoscenza allora
capisci questo, questo non dovrebbe succedere
Dovrei davvero trovare questo oggetto
Mi limito a restituire null no, basta lanciare
non essere un pollo se questo è un
circostanza eccezionale nella tua
l’applicazione usa bene il nome appropriato
eccezione e l’eccezione
sai cosa il mondo non sta andando
esplodere perché lo fai così ecco qui
proprio come sarebbe la classe opzionale
come in c-sharp è generico che possiamo
creare devo chiedere è presente
Sì, allora ottieni il valore se cerchi di ottenere
il valore con esso così per qualcosa
questo non è presente, allora ti capita
ottenere un’eccezione
quindi se vedi gente brutta là fuori tu
sapere che c’è qualcosa chiamato il
tipo nullable come si può usare per
tipi primitivi che sono veramente utili
se hai a che fare con database che sono
il caso d’uso per gli orologi che è ciò che è
destinato, perché i database trattano in
intrinsecamente con null così potrebbero
restituisce null ed è davvero un bel modo
di fare questo, ma non è lo stesso
come opzionale perché qui è solo un altro
modo orribile di assegnare null adesso a a
tipo primitivo che puoi ottenere
come null 2.0 nella tua applicazione quindi
usa questo solo ai margini del tuo
applicazione al database o all’interfaccia utente
strato ma può rimanere utile per l’interfaccia utente
widget come il pulsante radio on / off non impostato
qualsiasi tipo di cosa quindi per favore non farlo
Metti questo nella tua domanda
corretto oggetto opzionale invece così bene
questo è tutto per noi
parlato del dominio di fiducia in cui ti trovi
la sicurezza e ho intenzione di parlare di
un altro modello ora che si concentra sul
Confida il confine stesso perché forse lo è
chiamato il modello non fidato dove make
fidati del primo concetto di test alla fiducia
confini la cosa con dominio guidato
sicurezza è grandioso dovresti usarlo se
puoi ma forse se ci stai provando
lo introduce in un progetto legacy è
chirurgia maggiore potresti non avere nemmeno un
oggetto di dominio affatto
giusto un modello di dominio a tutti così
dove dominio Durham e sicurezza è
difesa come in profondità ovunque
il modello non fidato è più di un perimetro
difesa dove vuoi solo alzarti
dove il confine di fiducia è così
chiaramente è visibile nel codice, quindi facciamolo
dai un’occhiata a questa funzione siamo a
confine di sicurezza qui ci vuole un po ‘
la barra di input proviene da non attendibili
lato del confine di fiducia e che fanno
qualcosa con la funzione è quindi su quello
lato fidato e la cosa che vedi qui
che non puoi davvero vedere la fiducia
confine diritto non si sporge yeah
stiamo facendo la validazione ma così tu sai
qualcosa è non sicuro probabilmente ma
non c’è davvero modo di dire dove
il limite del trust buck è così utile
modo se non vuoi, se vuoi
vuoi che il tuo codice sia quasi come
bytecode compatibile è giusto per rinominarlo
questo è abbastanza efficace
trucco se stai facendo come il lento
refactoring per trovare il tuo
confine di sicurezza basta rinominare il tuo
variabili di conseguenza se qualcosa è
non fidato perché mettere un underscore non fidato
di fronte a lui so che questo viola il
linee guida per la denominazione ma hey è carina
utile in modo che tu sappia semplicemente ignorare questa regola
nel tuo IDE o chi si lamenta così del
la cosa buona ora è che quando guardi
una funzione qui hai quest’altra
funzione ci vuole una barra non sicura e
si fida di te e proprio come nel
esempio di spline angle sai cosa succede
con i dati di come ci fidiamo di cui ci fidiamo
ovviamente perché non dice
inaffidabile prima così ora è davvero
facile vedere che abbiamo dimenticato di convalidare
l’array di byte di dati che è probabilmente
male perché è pieno di buffer
trabocca o qualsiasi altra cosa sì, si può
fare un passo avanti hanno il
metodo di validazione restituisce le barre e
lo rende un po ‘più ordinato ma possiamo
fare meglio di questo c’è davvero
nulla che ci costringa a fare la convalida
qui a destra potremmo semplicemente prendere il
non affidabile e basta assegnarlo al bar solo
passalo a fare qualcosa con la funzione
nessuno sarebbe più saggio, e se noi
fai questo questo è il modello non attendibile
qui possiamo usare il tipo system e make
è un oggetto generico che sto dicendo generico
la cosa giusta sì sì, io sono generico
i miei modelli in c-sharp ma lo sono
i generici qui si scusa, quindi avvolgi i nostri
valore in un contenitore non affidabile e noi
voglio farlo in modo che l’unico modo per
ottenere il valore di questo non sicuro
il contenitore è fare la convalida così sono
ti mostrerò come farlo in
c-sharp diamo un’occhiata a questo è
come sarebbe la classe non fidata
e vedi qualcosa di strano per questo
qualcuno lo vede è sembra questa classe
utile come ottengo come ottengo
il valore fuori da questo perché il getter
è privato, quindi sembra impossibile
non riesco a ottenere il valore da questo
scatola non attendibile che abbiamo chiusi in
bene in c-sharp c’è qualcosa
gli assembly assemblati chiamati sono come a
jar archivia l’unità di imballaggio in c-sharp
e c’è qualcosa chiamato assembly
direttive che è come il manifest
file per il file jar fondamentalmente e
c’è una direttiva di assemblaggio chiamata
internals miss internals visibile a dove
puoi dichiarare che tutti gli interni
le variabili private di questo
il montaggio dovrebbe essere visibile a tutti
in questa altra assemblea, quindi cosa succede se noi
avere un assembly chiamato validation e
l’assembly di convalida ha un validatore
classificare il DES validare di T e poi
restituisce il valore se è valido
altrimenti gira su una convalida
eccezione e implementatori un validatore
sostituirebbe quindi il metodo del modello
interno convalidare per fare il reale
validazione così qui può il validatore
effettivamente ottenere il valore a causa del
interni visibili alla direttiva quindi
sarebbe simile a questo
otteniamo un non trusted di stringa o il
numero di conto è che abbiamo due nuovi fino a
numero di conto convalidatore e chiamata
convalidare e quindi pop otteniamo il fidato
valore convalidato al di fuori di esso
non c’è altro modo per noi di ottenere il
numero di conto verso il non attendibile
contenitore quindi non possiamo tecnicamente noi
non posso dimenticare che abbiamo messo il nostro
camicia di forza su noi stessi e abbiamo
per fare la validazione che è grande di
Certo che possiamo fare un validatore del nulla fare
è destinato a comparire nel progetto
prima o poi, che ci limiteremo a tornare
senza fare la convalida ma almeno
sai che stai imbrogliando giusto così
creare questi audit non attendibili di cui abbiamo bisogno
qualche codice per la mappatura della colla, ne abbiamo due
rinnovare questi non fidati e poi solo
ricordati di passarli all’at
il confine non fidato non è molto
elegante un po ‘goffo sarebbe
bello se questo è successo automaticamente in
il per quanto ne so non può davvero
essere fatto in c-sharp a meno che non ti affidi
alcune funzionalità di framework come asp.net
legatura del modello puoi prendere i tuoi valori
e poi sempre come avvolgerli nella tua
legatore di motori e passarli ad Assam
fidato o che potrebbe essere semi utile
perché la validazione è davvero buona
asp.net e vediamo comunque, ma abbiamo
tutti i programmatori C ++ qui nel chrome
Sì, va bene lo schema non attendibile
è più elegante in C ++ perché è C ++
qualcosa chiamato costruttori impliciti
e amici classi un amico classi
significa che non devi dichiarare
che l’ambito del pacchetto puoi dire a
l’ambito di applicazione alla classe che questo dovrebbe
questo dovrebbe essere accessibile al validatore
istanze e costruttori impliciti
significa che non hai bisogno di questa colla
codice puoi semplicemente dichiarare i tuoi input come
non affidabile o e quindi c ++ il compilatore
capiremo che c’è un percorso
attraverso il costruttore non affidabile a
l’oggetto che fa un sacco di persone
odio costruttori impliciti che è
davvero complicato ma è molto utile
in questo caso lo lascerò come un
esercizio per il lettore da implementare
questo in C ++ così giusto che è quello
modello non attendibile di nuovo guidato dal dominio
la sicurezza davvero buona dovrebbe essere il
metodo preferito, penso che se non puoi farlo
prova il modello non fidato anche da
rinominando o semplicemente facendo il modello di
Completa così come ho detto prima
immutabilità che è davvero un bene
cosa e abbiamo parlato molto della fiducia
e cosa abbiamo bisogno di convalidare qualcosa
prima di poterci fidare ma cosa succederebbe se
qualcosa può cambiare dopo averlo convalidato
quando è dentro la nostra cerchia di fiducia
come possiamo fidarci allora è stato
cambiato non abbiamo più convalidato
giusto quindi non importa se andiamo dal
fuori dall’interno
nel cerchio della fiducia o dal
dentro verso l’ esterno quando passi
qualcosa fuori gli oggetti che passiamo
oltre il confine di fiducia dovrebbe essere
immutabili non dovrebbero essere in grado di
cambiare altrimenti puoi farlo con intelligenza
le condizioni di gara bypassano la tua convalida
quindi diamo un’occhiata a questo forse
la tua applicazione gestisce la concorrenza
probabilmente se stai facendo il tuo web
applicazione hai centinaia di thread
come influisce sulla tua convalida il
cosa che hai appena convalidato è ancora
valido quella è la domanda principale così noi
ho parlato di parlare al momento del check-in
tempo di utilizzo e tutti voi avete visto questo
forse senza pensarci ecco a
metodo tipico metodo Java che
trasferisce un po ‘di denaro e prima di tutto
controlla che l’account contenga questo
importo e poi lo trasferisce in caso contrario
ottieni un’eccezione di convalida, quindi noi
avere un tempo di controllo toc e un tempo di
usa tou
ma cosa succede se un altro thread modifica
importo tra il tempo di controllo due volte di
usa allora sai che diventiamo milionari
qui quindi il problema è che possiamo inviare
se l’importo dell’oggetto non è immutabile
allora possiamo passare un oggetto di quantità
che passa la validazione ma poi è
cambiato e modificato prima del reale
l’uso di ciò accade naturalmente
lasciaci vulnerabili a un attacco
quindi la soluzione è ben immutabile
se la quantità dell’oggetto appare così se
abbiamo una finale qui il valore non può essere
cambiato e non c’è setter ma siamo
buono nulla può cambiare tra il tempo
di controllo al momento dell’uso in modo da sbarazzarsi
di questi setter giuste notizie finali o
read-only in c-sharp immutability is
fantastico che tu sia significativamente ridotto
il discorso ai problemi suona molto bene
con sicurezza basata sul dominio come I
menzionato e leggibilità
approvvigionamento di eventi di parallelizzazione ecc. ecc
l’immutabilità dovrebbe essere la norma
dovresti lottare per quello che dovresti
dovrebbe essere così abituato che quando tu
vedere un oggetto mutevole qualcosa che può
modificare
dovresti solo oh dovresti sentirti male
e prova a contenerlo e spostalo
altrove
prendiamone un altro
ottenere una condizione di gara qui quanti di
sai in qualche modo una condizione razzista
mani in ordine, va bene, è così così
quando quando dipende qualche uscita
la sequenza o il tempo o altro
eventi incontrollabili che è una gara
condizione e nel software web è
in genere rispetto ai thread di richieste Web
giusto che gareggiare gara per l’accesso a un
risorsa così lontana dal portare a a
bug super hard come bug heissen che
non puoi eseguire il debug non puoi ottenere questo
quando fai il debug, usa spesso, allora
si tratta di un problema di sicurezza come pure immaginare
questo hai un che stai facendo è come un
carrello della spesa un mago ci sono tre
passi in cui l’utente entra per la prima volta
procedura guidata sceglie un prodotto e quindi controlla
qui abbiamo una mappa statica del
dati che dobbiamo assegnare a ciascun utente ciascuno
l’utente ha un identificatore che è dire griglia
o un UUID nell’identificatore univoco Java e
tutte le persone a conoscenza della concorrenza nel
pubblico vedi la parola chiave statica e
sei come non lo farei mai
statico lo sai in una app web che sei tu
sapere l’elemosina per problemi ma questo
potrebbe anche essere un servizio se ne hai uno
contenitore di iniezione di dipendenza forse
il tuo servizio è un singleton, quindi questo
sarebbe solo un’istanza regolare
variabile che sarebbe lo stesso
perché sarà condiviso da tutti così
è solo statico per l’ uso del
esempio qui così bene passo uno l’utente
entra nel wizard viene assegnato un nuovo a
identificatore univoco prendi alcuni dati e
ottiene l’identificatore restituito e passo
due otteniamo la chiave e la query
stringa probabilmente dall’utente e quindi
ora l’utente ha scelto un prodotto così
okay aggiorniamo i tuoi dati della procedura guidata con
questo ID prodotto e poi nel terzo
passo qui è come un passo di verifica noi
ottenere i dati dalla nostra mappa e
controlliamo che l’utente abbia accesso a
questo ID prodotto e se lei ha signore lui
allora abbiamo fatto qualcosa con esso così fa
chiunque veda cosa potremmo fare qui, che cosa
l’utente malvagio potrebbe fare cosa se ciò che accadrebbe se noi
martellare l’applicazione con la fase di invio
due richieste ad esso
mentre stiamo facendo il checkout noi
capisco, questo non lo è
inverosimile pensare che va bene al passo
tre capisco che qualche convalida
sta succedendo perché non posso scegliere questo
idea segreta che in qualche modo ho imparato
a proposito , forse c’è il discorso
vulnerabilità qui mi limiterò a mantenere
bombardando la mia applicazione con la fase due
richiede mentre faccio il passaggio tre forse
Sono fortunato e inietterò subito
tra qui e otterrò davvero
accesso a questo ID prodotto segreto in modo che
soluzione del corso è quello di rendere i dati
immutabile quindi abbiamo di nuovo l’esempio
sembra esattamente lo stesso, ma abbiamo
qualcosa chiamato dati immutabili ora
invece il primo passo è lo stesso il
il secondo passo qui è la differenza
invece di solo un segno di cambiare il
ID del prodotto sul nostro oggetto esistente noi
non possiamo farlo più abbiamo un
oggetto immutabile immutabile che dobbiamo
creane uno nuovo in modo da averne un po ‘
metodo di convenienza sui dati immutabili
oggetto chiamato clone con nuovo
ID prodotto Immagino che dovrebbe essere chiamato
quindi ci vogliono tutti gli altri campi che sono
che i dati ha un sacco di campi in esso
e clona quelli e assegna un nuovo
ID prodotto e quindi lo inseriamo nel nostro
nella nostra mappa e il terzo aspetto
esattamente lo stesso abbiamo ancora tempo
di controllare il tempo di utilizzo non possiamo mai
fuggire da quel diritto ma ora i dati lo sono
immutabile non importa quanti gradini
due richieste mi bombardano nel mezzo di
ci sto solo andando ad assegnare un nuovo
oggetto e la convalida e il
controllare e l’uso sarà sempre
eseguito sugli stessi dati così
immutabilità non risolve tutto il
problemi nell’universo, naturalmente, ma
è che puoi considerarlo come un
spruzzo di sicurezza rende il codice molto
più facile da capire molto più robusto
e dovrebbe come ho detto che dovrebbe
sarebbe davvero una buona ragione che dovresti avere
un buon motivo per non fare il tuo
dati immutabili dovrebbe essere la norma
oggetti mutevoli qualcosa che può
il cambiamento dovrebbe essere contenuto isolato e
solo colpito con un bastone
quindi perché un sacco di tempo lo mescoli
hai un oggetto con molto
proprietà e molti di loro non lo faranno mai
cambia bene, allora sai come calcolare un
oggetto immutabile di ciò che mette il mutabile
stato e un altro oggetto che solo tu
tocco in certi momenti certi rende
tutto molto più facile e molto di più
sicuro dovrebbe essere la norma
si tratta di immutabilità parliamo
sul modello finale qui qualcosa
ha chiamato il modello inverso del coach della vita
e per capire l’inverso allenatore della vita
modello dobbiamo prima guardare al
allenatore di vita anti-modello così la vita
allenatore anti-modello va qualcosa di simile
questo è il life coach che ti parla
non hai ancora fatto niente, amico mio, ma tu
sono già un successo, non importa
quello che succede nel mucchio di codice lo farai
avere successo e anche se non lo farò
ancora ti carica è fantastico essere un
life coach quindi se per qualche ragione tu
erroneamente uscire da qualche parte nel mazzo di
codice e avere prima e non hanno detto
successo a false tornerai successo
vero che è sbagliato giusto perché
non c’è stato un successo e questo è un
gran parte del bug fallito
si potrebbe sentito parlare di quello che è successo a
OS X che ha reso la validazione TLS in OS X
scomparire che hanno aggiunto la formica
la vita scusa allenatore un life coach e a
pattern insieme ad alcuni duplicati di dub
istruzioni goto quindi cosa dovresti fare
e naturalmente l’allenatore della vita inversa
bene, supponi che tu non sia un fallimento
successo devi dimostrarti
mazzo di codice e forse se sei veramente
abbastanza bene hai davvero quello che serve
certo, vai avanti e torna da solo
un successo ma possiamo fare meglio questo è
come un esempio di come stiamo usando a
linguaggio orientato agli oggetti probabilmente
il modello tipico sembra così falliamo
veloce come proviamo a controllare e assumere
fallimento e gettare un’eccezione se noi
c’è qualcosa che non va, può esserci un mucchio
di queste affermazioni se non ha asse se se
non conosci l’account consentito
operare con questo metodo se non se non se
non dovrebbe essere davvero difficile da percorrere
attraverso questo per andare davvero in a
mazzo di codice e poi se siamo contro tutti
probabilità’
farsi strada attraverso un mucchio di codice
quindi sicuro
ritorno non ti restituiamo un successo
sapere ha fatto ha funzionato vero o falso
no, si dovrebbe restituire solo un adeguato
oggetto dominio l’unico modo di uscire
questa funzione è o di esplodere in un
eccezione o attraverso una molto stretta
percorso impegnativo percorso di successo finisce
con un oggetto dominio valido dovresti
sai che dovresti immaginare la funzione
come l’Oceano Atlantico e tu sei un
Frenchman bruciato dalle bruciature del sole che
deve attraversare il windsurf è così
stretto è quello il percorso del successo
okay, quindi non c’è modo per te di uscire
questo senza avere un oggetto valido siamo
pronto per avvolgere le cose mi rendo conto
Sto parlando molto velocemente ma hey quello è
come va a volte
Voglio che ci siano cinque cose
che voglio che tu ti porti a casa con te
da questa sessione
il primo è considerare la tua fiducia
confini dove stai posizionando il tuo
fiducia
pensa al cerchio della fiducia
tutto al di fuori è di fiducia che hai
questo piccolo sottoinsieme all’interno è affidabile
e la convalida è l’unico modo di
sapendo questo dove se i tuoi dati sono validi
o no
o fidato, quindi pensa davvero a questo
dove stai mettendo la tua fiducia e
minimizzare la fiducia, naturalmente, dovresti
provate davvero la mangiatoia di insicurezza che è
facile è semplice in quanto potrebbe sembrare
quasi banale lo sai, certo
metti un po ‘di validazione nel tuo
oggetti rimanenti, ma accoppialo con
la mutabilità
e lo stiamo usando da un po ‘di tempo
solo che è così grande, perché sai che il tuo
gli oggetti sono sempre validi e puoi
prendi i tuoi bug molto presto e tu
non devi davvero ottenere un po ‘
agganciato alla convalida che vuoi di più
convalida così e tu se vedi un
il tipo primitivo passato a disegnarti
come oh, che cosa è questo non è attendibile
è così facile basta cambiare per la
oggetto principale dà una grande difesa in
profondità e come ho detto un paio di volte
l’immutabilità dovrebbe essere la norma che cerco di fare
isolare il tuo stato mutabile se vedi
qualcosa di mutabile dovresti sentirti male
qualcosa con setter giusto è
orribile cerca di contenerlo e minimizzarlo
è diffusa perché forse te ne rendi conto
che usando
bisogno di quella flessibilità per avere mutabile
dichiari che puoi ucciderlo, sì, non molto
da dire su questo no questo un errore
è un puntatore non valido non assegnato
qualsiasi altro significato a null okay
non è la vita diventa così molto più facile
quando non passi in giro ora non lo fai
deve fare ora controlli non è necessario
vedi quella brutta parola null ovunque sia
appena andato devi dimenticartene
dormirai meglio di notte
tutto è meglio usare opzionale di T a
indica i valori mancanti se manca
il valore è una cosa eccezionale perché buttare
un’eccezione e tu sai guardare il
il mondo brucerà sarà fantastico
spara al tuo allenatore di vita essere un pessimista
supponiamo che tu non sappia il sentiero stretto per
successo si wind surfing attraverso il
Atlantic sei un sunbird francese bla
bla bla è così
gente spero che vi sia piaciuto e che tu
ho imparato qualcosa di nuovo e puoi candidarti
questi modelli e concetti immediatamente
quando torni alla tua programmazione
attività
Non essere timido esitate a contattarmi I
ho come sette tweet lì, ma se tu
twittare ricevo una e-mail così poi io ti conosco
mi hai twittato, voglio solo collegarlo
questo un po ‘rapidamente qui c’è un
security de conference in novembre a
Malmo solo attraverso l’acqua alcuni davvero
roba interessante lì è in ordine
li a controllare e per favore ricorda
valutare questa sessione e abbiamo circa
13 minuti per le domande quindi non essere timido
– Hai delle domande grazie, hai detto
anche voi non che spesso non è
ecco perché sono così utili, voglio dire che lo è
è II piace parlare è facile
essere come scoraggiato quando si pensa
sicurezza, credo che tu pensi oh, oh, tu
sapere che non importa se faccio questo o
non perché sai se qualcuno vuole
possono ancora hackerare la mia applicazione ma
non è vero, non è proprio vero, sicuro
se sono come uno stato-nazione è dopo
tu l’NSA o qualunque qualcuno qualcuno
chi è veramente esperto e determinato sì
probabilmente possono modificare la tua applicazione
e la tua compagnia o qualsiasi altra cosa tranne te
so che è la regola 8020 con un piccolo
ammontare dell’impatto del 20 percento si ottiene l’80%
del successo, quindi questo è solo corretto
la convalida trova il tuo limite di fiducia
immutabilità cose davvero semplici che è
renderà molto più difficile per il
nella media sai che l’hacker non lo è
andando a dire un paese solo alcuni
da qualche parte per hackerare la tua applicazione
sì quindi farlo è che sia si può veramente
fai molto con piccole cose
sì, mi dispiace che ci sia se ci sei
Conferma di fiducia hai convalidato il tuo
dati ed è attendibile proprio lì
ancora regole aziendali che devono essere
convalidato ma non devi
conferma nuovamente i tuoi dati perché puoi
non fa male ma non devi
perché dovresti dovresti fidarti del tuo
sistema giusto hai un metodo tu
dovresti fidarti, altrimenti lo farai
finire con la convalida un po ‘
sparsi ovunque sul codice o su
il codice ma se lo fai correttamente
allora dovresti star bene se lo hai
qualcosa di super sensibile
forse dovresti aggiungere più strati come se
hai questa parte critica del tuo
l’applicazione non fa male a farlo fare il
convalida di nuovo giusto perché forse
qualcuno cambia questo oggetto là fuori
e poi finisci con dati cattivi qui
così, ma quello che uso io quando lo faccio
la sicurezza basata sul dominio il più possibile
e poi per quelli più sicurezza
cose critiche ho avuto qualche altro strato
proprio come dopo quando stai facendo
la tua carta di credito che elabora qualsiasi cosa
proprio lì, fai ancora un paio di cose
basta essere sicuri cinture e bretelle
penso che ci fosse qualcuno che non va bene
sì sì, io voglio attaccarmi al collo
fuori e domanda che lo adoro
se è davvero se lo è davvero
prestazioni critiche voglio dire non lo so
con cosa lavori ma potrebbe funzionare
Facebook okay ma io voglio solo
attenzione contro come prematuro
ottimizzazione di cui hai davvero bisogno
misuralo e se va bene se lo sai
srotolare una pila e intercettare l’avvolgimento
l’eccezione è troppo costosa per te certo
ma sono stati come parlare
su Java che tutte le eccezioni sono
caro non puoi usarli dovresti
usa Valis di ritorno che è come quindici
anni fa
sai che non si applica più così
ma assicuratevi solo assicurarsi da da
misurando quello è davvero il caso
e poi sicuramente andare avanti e fare qualcosa
altro che cercare di utilizzare di utilizzare questi
eccezioni il più possibile sì
prima di te è piuttosto difficile da fare
quindi diciamo che hai qualche oggetto
hai dieci campi e tu vuoi
cambia un campo quindi devi fare un
costruttore
devi copiare i nove campi e uno
vuoi cambiare si e cosa intendo
quindi non è affatto facile, intendo il nostro
la lingua non è cocaina per immutabilità, quindi
è abbastanza facile dire basta farlo ma dentro
infatti è totalmente difficile che io no
penso che sia così difficile in realtà no
dipende forse se hai dieci campi
forse è troppo forse puoi
refactoring in due oggetti ovviamente è
può essere fastidioso sai farlo ma
puoi usare il modello Builder
invece invece di fare un enorme
costruttore devi chiamarti per fare un
oggetto costruttore che hai impostato è a
schema puoi cercarlo ma io penso
Non credo che sia così difficile non fare
penso di essere sicuro che siano costruiti per
mutabilità non è come un concetto di base
non è un cittadino di prima classe nel
linguaggio ma penso che possa essere usato
con successo senza troppo senza
qualsiasi dolore i benefici sul modo in cui il dolore
non c’è ci sono c’è il dolore sì
ma è un bel dolore spiacente esterno
dipendenza quindi è abbastanza facile da dire
okay una caviglia dovrebbe essere da zero a 90
gradi o qualunque cosa, ma se devi
controllare prima di fare un account lo fa
esiste già allora hai un esterno
dipendenza dai dati
e puoi metterlo dentro l’entità
perché quello sarebbe succhiare voglio dire così è
non così facile come lo metti perché intendo
l’entità ok io ho io sono un valido
intero ma forse qualche altra entità
ho già il mio Mac si, certo
è come il dominio in cui ti trovi
la sicurezza garantisce che il tuo base
blocchi di costruzione sono validi quindi sì di
Certo, devi convalidarlo
avere accesso a questi account e fare
questi solo controlli regolari prima di te
creare il tuo anche creare l’oggetto sì
non si dovrebbe mai chiamare un servizio da
il tuo dominio per oggetto ovviamente non è così
hai ragione assolutamente non copre
tutto ma sicuramente batte il diavolo
senza convalida e o
avendo convalida ovunque così sì
non è un non è il nostro proiettile d’argento
ma è davvero buono, penso bene se tu
non avere più domande
Penso che diciamo solo grazie, va bene, grazie
tu
tu
Please follow and like us: