Press "Enter" to skip to content

GOTO 2016 • Secure Coding Patterns • Andreas Hallberg


quindi si il mio nome è andreas Halle Berry I
provengono da una società svedese chiamata
truseq e parlerò di
garantire codifica modelli, ma non solo sono
assicurano che sono anche robusti e
naturalmente robusto dal momento che questo è il
pista robusta così robusta è davvero
importante importante parola Penso che in
sicurezza perché se non è robusto è
non è probabile che sia sicuro per favore ricorda
per valutare questa sessione lo sapete tutti questo
quindi ma lo sto ripetendo comunque sì
lavora su truseq, eccoci in una compagnia
viaggio in Sud Africa la maggior parte del mio tempo
spendere sviluppando forse il 95% del mio tempo
speso lo sviluppo usato per fare un sacco di
c-sharp ora è prevalentemente Java in questi giorni
Faccio anche qualche revisione del codice di sicurezza
penetrazione di sicurezza test di sicurezza
allenamento e cose del genere in pratica
qualsiasi cosa relativa alla sicurezza e se tu
non so cosa sembro che sono io
proprio lì e ora sono stato fuori
parlare un po ‘in conferenze come
questo ho notato che divento un po ‘
una celebrità di internet, infatti, c’è
solo un esempio delle immagini che sono
su Internet di me sì sì
i paparazzi sono ovunque non troppo malandati a
brutta giornata ma sai che non puoi vincere
tutti loro
quindi comunque sicurezza parliamone
è importante o è perché siamo noi
ecco perché sei perché stiamo discutendo
questo a tutti la cosa è quando parlo
scusa
prima quando parlo per sviluppare noi stessi
trova molto del tempo che molti sono
disillusi di sicurezza dicono
che non ha senso garantirne alcuno
codice perché se qualcuno vuole entrare
sai che alla fine arriveranno
se l’ NSA mi sta cercando, lo faranno
prendermi in giro non importa quello che faccio bene forse
questo è vero se l’NSA ti sta seguendo ma
La NSA non ti sta dando la caccia
l’ applicazione è la tua applicazione
bersaglio di un esercito di semi mediocri
criminali e bambini negli scantinati vanno bene
questa è la principale minaccia per
il tuo
attraverso la tua applicazione e la cosa
è quando facciamo test di penetrazione truseq
non dobbiamo tirare fuori i grandi cannoni
non usiamo zero giorni per prendere il controllo del tuo
sistemi usiamo solo il filo di base che tu
avresti potuto correggere con un minimo
sforzo c’è un’iniezione sequel
c’è un’iniezione di comandi che possiamo eseguire
comandi di sistema via dal tuo sito web noi
puoi caricare un file ed eseguirlo sul tuo
sito web senza problemi questi sono
gli errori banali che lo troviamo
puoi sistemarlo così come ha detto Josh
mattina sei la cavalleria della cavalleria
non sta arrivando, siamo la cavalleria okay
e possiamo aggiustarlo
e anche nel robusto manifesto come Josh
Stava parlando di quello che hai detto tu
dovrebbe presumere che il tuo codice sia in corso
attaccato da un esperto che non riesco a ricordare
le parole esatte ma un talento e
avversario ostinato voglio dirlo
talentuoso forse non così tanto lo sai
non aver paura non essere disilluso
persistente sì, queste persone hanno molto
di tempo ma non sono così intelligenti no
dato che molto credito sono
persistenti usano strumenti e usano il
difetti di base che hai nel tuo codice
e abbiamo nel nostro codice quindi è doloso
picture uh non è un uomo di cavalleria ma un
uomo di fanteria questo è lo svedese
eroe nazionale fittizio Sven Diva che
da solo ha tenuto il ponte contro
questo esagerato esercito di invasori russi
non c’è somiglianza con Internet
Ovviamente possono essere da un altro mondo
paese che la Russia, ma la cosa è
armato di un po ‘ di conoscenza e
osando puoi tenere il ponte contro
questo esercito di aggressori mediocri va bene
è la regola 80/20 che abbiamo imparato
chiamato la regola di Pareto, penso con il 20%
lo sforzo si ottiene l’ 80% fatto bene quindi andiamo
iniziare ho intenzione di parlare
sulla fiducia che prepara il terreno per il
resto del discorso in cui mi tufferò
i modelli lungo un secondo e il
primo modello o metodo che sarò
parlare è chiamato dominio-driven
la sicurezza si basa su Domain Driven
design che
Sono sicuro che molti di voi hanno familiarità
Parlerò di qualcosa
chiamato il modello non fidato che voglio
stare parlando di immutabilità e
infine il stranamente chiamato l’inverso
modello di vita-allenatore in modo cerchiamo di iniziare
fidati delle fondamenta del software
sicurezza entrambe le parole sì è il
fondamento della sicurezza del software molti
problemi di sicurezza se non la maggior parte si riducono a
una scarsa comprensione di dove noi e il nostro
codice viene stanno mettendo la fiducia in modo da farci
dai un’occhiata ad una tipica interazione
qui come controlliamo ci fidiamo di come
stabiliamo la fiducia che questi sono
cose importanti quindi ecco un uomo d’affari
Bob è alla banca lì autenticare
stessi l’un l’altro e poi un Bob
vuole trasferire X eroi dall’account
Y per account Z e sicuro andare avanti
quindi ciò che potrebbe andare storto è proprio come
una cosa tipica che hai
passo di autenticazione e hanno un
azione che deve essere eseguita cosa
potrebbe andare storto qui sì, prima di tutto
diamo un’occhiata alla vera autenticazione
come fa la banca a essere sicura?
Bob è davvero Bob e come può essere Bob
certo che la banca è la banca e quando
lui vuole trasferire i soldi come facciamo noi
sappi che Bob possiede un account perché noi
conosci quell’account perché detiene l’importo
che vuole trasferire di fatto sì
e in effetti sappiamo persino che X è un
il numero è a o meno 1 o foo o
qualcosa quindi dipende da quale parte
sei su di te puoi davvero fregarti
qui Bob potrebbe rovinare la banca o il
la banca potrebbe rovinare Bob, quindi vediamo
fidati come un cerchio di fiducia e come un
applicazione o API o qualsiasi altra cosa
tutta questa roba che è al di fuori del
cerchia di fiducia che hai l’utente
sicuramente non ci si può fidare di avere i dati
sta arrivando
hai il database che hai il terzo
servizi per feste e
ecc ecc e c’è un limite di fiducia
qui ciò significa che è tutto
al di fuori del confine di fiducia non è considerato affidabile
e tutto dentro è fidato e così
Ti brucerò gli occhi con questo
scivolo qui sarà sulla tua retina
per i prossimi 30 minuti, quindi questo è
davvero semplice e ma a
la diapositiva illustrativa ne ha molti
concetti importanti uno è che il
l’area di fiducia è limitata è piccola noi
può enumerare tutto all’interno del
area di fiducia mentre lo è
illimitato non ha limiti è così tanto
più grande e significa che questo è il motivo
ascolto bianco contro ascolto nero
non funziona sarò parlando di quella
un po ‘più tardi l’ascolto bianco è dove tu
enumerare tutto è permesso mentre
l’ascolto nero è quando ci provi
enumerare ed elencare tutto ciò che non lo è
permesso solo guardando questo è possibile
vedi che la lista nera non funziona
perché tutto ciò che non è permesso è
praticamente infinito, ecco perché noi
dovrebbe fare l’ascolto bianco / nero
elenco ma poi, dopo tutto, come funziona
Diventano qualcosa dall’area non fidata
di fiducia, dopo tutto, abbiamo bisogno di lavorare con
tutti questi dati altrimenti la nostra applicazione
è inutile bene attraverso ogni sviluppatore
convalida attività preferita che è il
la maggior parte divertente della vostra applicazione è
la prima cosa che inizi a fare quando tu
scrivere sapeva che niente nuove funzionalità
niente del genere si inizia con il
la convalida forse no ma la cosa è
la convalida è il tuo strumento per essere sicuro
di avere dati attendibili per due cose
può succedere che i tuoi dati siano validi
è consentito all’interno del cerchio di
la fiducia o non è valida è respinta
e rimbalza così la convalida c’è
alcuni diversi tipi di convalida noi
hai lì cosa penserai normalmente
di convalida significa che sono i dati
valido nel dominio come non possiamo
trasferire un euro o meno uno
c’è anche canonicalizzazione e
normalizzazione
Penso che la canonicalizzazione sia come C 13 N
o qualcosa del genere se vuoi essere bello ma
queste sono cose che devono accadere
prima
o convalida qui vedi un potenziale
percorso traversal attack come viene chiamato
forse nel permettere alle persone di caricare roba in
caricamento di file pubblici ma alcuni malintenzionati
invia un file con il nome del file punto
slash punto dot cancella segreti chiavi così il tuo
sistema operativo sta per comprimerla
per vedere le chiavi dei segreti ma se convalidate
questo e dì che si sta andando
caricamento di file pubblici sarai il
vittima di un attacco di attraversamento del percorso
quindi è necessario che la normalizzazione avvenga
prima della convalida poi c’è
sanificazione dove si pulisce
dati pericolosi o sconosciuti e un libro di testo
esempio è l’iniezione di log che tutti avete
accedere ai tuoi siti web e se qualcuno
entra in un valore che io davvero non
riconosco forse dici ok ho capito questo
previsto X euro ma ottenuto meno uno e
quindi si registra il meno uno come fai tu
sapere che l’ utente non digita in un nuovo
linea e una nuova fila totale di registrazione che
modo in cui l’utente malintenzionato può effettivamente
inserisci le righe nel tuo log quindi devi
ripulire i dati che arrivano
stai registrando anche è così
sanificazione ora convalida che ho menzionato
questo prima preferisce sempre la lista bianca
sull’elenco nero ricorda l’immagine
è facile che tu non possa sapere tutto
questo non è valido ma puoi sapere cosa c’è
valido e un’altra cosa con rigoroso
validazione oltre ad essere una sicurezza
cosa che rende le tue cose di movimento
dal non fidato al lato fidato
ti aiuta a trovare i bug in anticipo invece di
sai ottenere un’eccezione otto
livelli nel codice e nella spesa
mezza giornata cercando di capire e
versando sopra le tracce dello stack se ne avessi
catturato qui dove è entrato il tuo
applicazione che avresti visto tutto
questo valore era meno uno o un non lo è
permesso che potrebbe averti salvato tutto questo
tempo così trova i bug presto se fallisci
veloce così ogni volta che convalidi
qualcosa che volevi chiedere a te stesso
va bene
qual è l’ intervallo minimo accettabile per
questo parametro e fai la tua validazione
non accettare più di così perché
è sempre allettante come sviluppatore
dire okay ho un numero di conto
esso
oggi dovrebbe essere di dieci cifre ma
Lo so o penso di sapere che tu conosci un
pochi mesi o sei mesi di gestione
dirai che sai ora il nostro account
i numeri sono dodici cifre o quindici e
Non voglio che tu sappia rilasciare questo
codice di nuovo e come averli
lamentarsi che roba non funziona
più così lascerò solo cento
i caratteri per il numero di conto no
fai in modo che sia al sicuro e dica che è così
quello che so in questo momento e questo è ciò che
Vado a confermare, quindi è brevemente
sulla fiducia e sulla convalida senza
più tardi mettiamoci le mani sporche
e guarda qualche termine di dominio del codice
insicurezza quanti sono qui dentro
un po ‘familiare con dominio guidato
design hansip va bene, questo è quasi
tutti sì quanti sanno cosa
il modello di dominio è solo un dominio sì, lo è
non è un dominio difficile è proprio come il
oggetti nella soluzione se sto lavorando
con una banca ho un account che ho un
utente ho soldi e tu sai che è
questi tipi di oggetti e dominio guidato
il design parla di come sono questi oggetti
collegati tra loro come si crea
loro come li salvi come te
manipolarli ecc così governati dal dominio
la sicurezza è il design basato sul dominio plus
alcune convenzioni per la convalida è
modello molto semplice ma profondo e
la cosa con questa è che ci aiuta
un confine di fiducia e ci dà
convalida ovunque in un buon modo così
la sicurezza basata sul dominio è stata coniata da due
gli sviluppatori della società svedese in realtà
chiamato punti Omega , quindi non l’ho fatto
questo fino a me stesso nessuno di questi
schemi che ho inventato io solo
li ho raccolti okay, diamo un’occhiata al nostro
interazione qui di nuovo ecco Bob di nuovo
quindi Bob sta tornando in banca
la banca si fida di lui e si dimenticano di farlo
convalidare ora perché era bello
sicuro, ma vedere quello che sta facendo
ora sta trasferendo un – dieci – mille
euro invece dal conto account bianco
C e Bank dice sicuramente bene perché no
Ti ho già convalidato. Mi fido di te
va tutto bene e il caching
questo finisce con questa nota nella sua
tasca così la cosa con la convalida è
che tu sei dolorosamente consapevole di ciò che ha
da eseguire più e più volte
per questo è facile dimenticarlo
convalidare da qualche parte e finisce
ovunque nel codice, ma è ancora
dimenticato da qualche parte ed è facile da
dimentica di convalidare qualcosa che tu
pensare è considerato come un interno
database Voglio dire un database che pensi
che tutti i dati provengono dal
Banca dati
sai che controlliamo il database noi
dovresti fidarti bene, c’è qualcosa
chiamato cross-site scripting che tu
può o non può avere familiarità con
persone in cui è possibile iniettare script
tag in pagine HTML essenzialmente in esecuzione
script nel contesto del login
utente in modo da poterlo archiviare se qualcuno
inserisce uno script nel tuo database e
lo mostri su una pagina che sei la vittima
della stor cross-site scripting che è
non so se ricordi il
myspace worm
molti anni fa era un sito trasversale
attacco di script e MySpace divertente solo
totalmente fuori tema qui, ma ho avuto un
email tre giorni fa su una sicurezza
vulnerabilità in MySpace qualcuno di voi
ottenere questo anche forse ero sì un ragazzo mi
non sapevo nemmeno che myspace esistesse più
a quanto pare ho avuto un account che e
avevano abbreviato lo sviluppatore
forse anche di più quindi diamo un’occhiata
di nuovo al confine di fiducia e vedere come
la sicurezza basata sul dominio può essere d’aiuto
questo quindi torna al cerchio di fiducia così
se hai una convalida regolare del tuo
tipi che puoi essere sicuro come te
convalidali che sei all’interno della circolare
confidiamo che tutto sia verde ma questo è un
foto in cui è verde il problema è
non puoi guardare il tuo codice e vederlo
questa stringa che è un numero di conto
forse o questo intero che è una somma ha
stato convalidato non c’è modo per voi
vedere che nel codice che non salti fuori
così sicurezza basata sul dominio che cosa fa
sono quei tipi primitivi e
le strutture non sono attendibili per impostazione predefinita
se vedi una stringa e un intero un byte
allineare qualunque cosa venga passata
intorno a te sai che non è stato
validato in modo da utilizzare sempre il dominio
oggetti e la cosa speciale che è
la parte di sicurezza del dominio guidato
la sicurezza è che tutti gli oggetti del dominio
per convenzione deve avere built-in
convalida che non possono essere creati
non valido che è la convenzione chiave qui
hanno anche una buona cosa per loro di essere
mutabile ne parleremo a
un po ‘più tardi, quindi con il dominio
oggetti o cerchi di fiducia
sembra questo invece abbiamo dentro
il cerchio che abbiamo gli oggetti del dominio noi
non abbiamo i tipi primitivi che non abbiamo
avere stringhe di numeri interi che galleggiano così
una stringa contenente un numero di conto
trasforma un oggetto account in un intero
che è una somma vediamolo sì
i lavori si trasformano in una quantità di oggetti così
all’interno del confine di fiducia solo il
vengono utilizzati oggetti di dominio convalidati e
ecco un esempio del dominio tipico
oggetto quindi hai il tuo numero di conto
che è C la parte fondamentale è quella sopra
la creazione è convalidata, non è possibile
creare un numero di conto non valido lì
non può mai essere un numero di conto non valido
essere passato in giro e usato da qualche parte
nel profondo del tuo codice perché
lo prenderai immediatamente sopra
la creazione è la principale
differenza di sicurezza è tutta la chiave
va bene e nota anche la chiave finale
eruttivo parlerò un po ‘di questo
un po ‘più tardi, il che significa che lo è
immutabile quindi è così se tu
avere un modello di dominio che applica il dominio
la sicurezza guidata è facile, okay
aggiungi la convalida ai tuoi oggetti di dominio
ovviamente devi ricordarti di farlo
questo non succederà automaticamente
ma dopo un po ‘diventa il secondo
natura e se vedi un oggetto dominio
senza convalida reagirai
e dire cos’è questo è strano così
se hai un servizio web in cerchia di
fidati di avere una chiamata di sapone integrale
i byte degli archi che arrivano ti danno il tuo
l’oggetto utente ottiene il tuo oggetto account ma
se otteniamo alcuni dati non validi è giusto
andando a rimbalzare e come
eccezione quindi sai che lo sai
tutto ciò che è nella tua cerchia che sta per succedere
tutto bene e si sta andando essere felice che
non devi preoccuparti di questo
un’altra cosa guidata dal dominio
la sicurezza fa per te è così
ti dice immediatamente quando ti sei dimenticato di
convalidare qualcosa così qui hai il
funzione reticolare che reticola s–
una spline e un certo angolo ma tu
sai cosa sta succedendo qui in angolo
questo è ciò che qui è che essa angolo può
essere negativo può essere grande
essere è in radianti probabilmente non da allora
in un numero intero ma ancora non c’è niente
dicendoti qualcosa su questo angolo
qui è solo un numero intero, quindi questo è
quello che dovrebbe apparire come l’angolo
dovrebbe avere il proprio oggetto dominio I
penso che questo sia un buon esempio perché
dimostra che anche una cosa così banale
come un angolo dovrebbe avere il suo
oggetto dominio forse non stai pensando
in questo modo non è degno di questo
un oggetto è economico e facile da usare
creare oggetti quindi andiamo avanti e facciamo
così ogni volta che vedi qualcosa non
essere un oggetto dominio in una funzione a
funzione pubblica nella tua classe sai
che hai dimenticato di convalidare qualcosa così
nel primo esempio come se non lo facessi
avere la convalida nell’oggetto dominio ora
reticolare dovrebbe ricordarsi di fare
la convalida si otterrebbe di nuovo questo
convalida sparsi ovunque nel tuo
codice un’altra cosa è quella
dominio di sicurezza guidato o Domain Driven
il design ci aiuta davvero ad appoggiarsi al
sistema di tipo così qui hai qualcosa
che riscalda
riscaldare qualcosa per una certa quantità
di tempo a una certa temperatura forse
è un reattore giusto, quindi lo vogliamo
far bollire per cinque minuti
che probabilmente riscalderebbe Otto Amsterdam
quattro o dargli elettricità quattro che ho
non ho idea di esserci, ma è questo
davvero cosa succederà qui che vedi
Qualcosa di sbagliato in questo sì sì è
non bollirà per cinque minuti
sarò a cinque gradi freddi Celsius
per circa cento minuti così tutti
tutti inizieranno a lamentarsi
su come l’energia nucleare non funziona e
dovremmo andare a carbone invece e perché
va molto meglio quindi sì, certo
questo è quello che vuoi
qui abbiamo il dominio appropriato oggetto il
tipo di sistema ti dirà durante
compilazione se stai chiamando questo
funzione con l’oggetto commutato così
è robusto e robusto, penso e basta
ti aiuta con sicurezza
quindi un’altra cosa quando usi il dominio
sicurezza guidata per un po ‘
um vedere la convalida al di fuori del dominio
oggetti oh ragazzo diventa quasi un a
codice odore quindi qui hai qualcosa
raccogli un numero di conto per un utente
dal database, quindi ne facciamo un po ‘
la validazione lancia prima un’eccezione e
ma se passa la convalida diciamo
ok lo trasferiamo ma lo paragoniamo a questo
quindi quello che faremmo è che vorremmo rinnovarci
un numero di conto e poi faremmo
i trasferimenti molto più puliti sono molto più facili
leggere e sappiamo per convenzione
la convalida sarà fatta lì così il
codice sai che è trasparente per il
il caso di utilizzo del percorso di successo mentre è ancora
proteggendoti dal male
percorsi quindi non aver paura di creare
gli oggetti tra l’altro quanti sono c-sharp
i programmatori qui vanno bene e Java okay
per lo più Java giusto e qualsiasi altra cosa
sì è ancora penso che sì Java è
guadagnando un po ‘su c-sharp sono stato
chiedendo a questo cristiano per un po ‘
sto bene, ora sono forse a Java
dopo tanto tempo con c-sharp così così
ribadiamo questo essenziale di
sicurezza basata sul dominio che conosci
convenzione che tutti gli oggetti del dominio sono
valido perché questa è la convenzione
devi convalidarli e lo sai
che hai dimenticato di convalidare qualcosa se
vedi passare i tipi primitivi
in giro come l’angolo che abbiamo lì il
heap e la durata che erano in
figure nell’esempio è dove il
sistema di tipo entra e assicurazione che
è necessario utilizzare l’oggetto dominio corretto
e naturalmente c’è ancora molto
convalida che non si adatta all’interno
all’interno dell’oggetto dominio c’è ancora
regola d’ affari
come questo questo utente ha permesso di farlo
l’utente ha accesso a questa entità o
qualunque cosa sia , naturalmente
devo convalidare forse ci sono alcuni
più oggetti di dominio che possono apparire
che puoi mettere la tua convalida in ma
non c’è un posto per un oggetto dominio
ovunque ci sia ancora un mucchio di
la convalida deve essere fatta ma almeno
si sa che gli elementi di base
della tua domanda sono validi lo farai
prendi questi bug di convalida presto
non li faranno esplodere qui dentro
il database o vicino ad esso
li potrete recuperare il ritardo nel sai
il primo livello di servizio che hai e
c’è un’altra cosa che voglio
Parliamo qui di quale tipo di calzascarpe
nel dominio durante la progettazione della sicurezza
è una domanda su null cosa facciamo
con null
ciò che è nullo ora è un costrutto
alcune lingue hanno come lingue quali
usa un tipo di riferimento che è dove tu
è necessario indicare che questo è un non valido
riferimento a un riferimento che non è stato
istanziato o assegnato a un oggetto così
alcune lingue in questi giorni non hanno
null perché i pericoli di null hanno
stato realizzato null è un puntatore non valido
causa eccezioni è solo un male
idea quindi non usare mai null nel tuo codice
non scrivere la parola null a meno che tu non lo sia
facendo un controllo nullo nel tuo oggetto dominio
dicendo che sto costruendo questo da
qualcosa ed è questa la cosa che
Sto costruendo da non dovrebbe essere
no quali sono i motivi per cui lo faresti
voglio usare null in genere è oh questo
il valore potrebbe non esistere Sto scegliendo
qualcosa dal database
non esiste
Ritornerò semplicemente nullo tornando ora
e perdonarmi è come restituire un sacco di
merda di cane bruciante va bene se la persona lo sa
il codice che ottiene questa borsa in fiamme
riesce a non farsi male sono ancora
lasciato con un disgustoso oggetto puzzolente
che ora devono saperlo
non essere quella persona che dà qualcuno
altrimenti un sacco di merda di cane in fiamme va bene
quindi rendi esplicito che Java abbia questo tipo
l’optional di questo è in Java 8 ora
questo è e questo è solo il c-sharp
esempio di ciò che sarebbe simile è
una classe molto semplice è un generico
che puoi avvolgere il tuo oggetto dentro e te
posso chiederlo è presente se
è presente puoi ottenerlo se ci provi
prendilo quando non è presente lo riceverai
allora otterrai un’eccezione ma questa
rende il tuo codice veramente esplicito e
chiaro dicendo che è sì quando ho scelto
questo valore dal database non lo faccio
sapere se questo account utente o sta andando
esiste o no quindi è un optional del
l’utente non è un oggetto utente che potrebbe
essere nullo e devi spargere il tuo
codice con assegni null e finisce con
borse bruciate di merda di cane va bene
per vedere passaggi brevi costruisci questo
nullable per i tipi primitivi che è
usato per la motivazione per questo è quello di
utilizzare per i database fondamentalmente i giorni di
i database funzionano molto con null che è
bene e ai margini ogni
applicazione il livello dell’interfaccia utente forse sei
trattando con i pulsanti di opzione ai tasti e
tutti anche e giù nel database dove
stai comunicando con esso è
comodo da avere questo ma non usare
nel tuo dominio non utilizzare in
il tuo agosto non voglio vederlo
fluttuando nel tuo ovviamente solo a
nuovo modo di aggiungere null al tuo
applicazione è come nessun 2.0 ora tu
avere nulla per i tipi primitivi sì sì
non usarlo a meno che non sia necessario a meno che
è molto conveniente ai margini di
la tua posizione la tua applicazione l’ altra
esempio l’altro esempio tipico che siamo
restituire null è allettante quando tu
ottenere invece oh questo non dovrebbe
capisci, sai quanto strano lo farò
torna ora no non tornare ora se
qualcosa è una circostanza eccezionale
nella tua applicazione mentre vai avanti
e utilizzare l’eccezione con nome appropriato e
butta quello invece non aver paura che sia
meglio sai cosa ascolteresti
alla discussione di stamattina
auto a guida autonoma ti piacerebbe la macchina
solo per dire che tornerò solo ora o
Vorresti per risparmiare fermare qualcosa
è successo eccezionale sai lo slam
i freni è quello che mi piacerebbe
Ecco un esempio e si vede il
modello opzionale al lavoro anche qui così
hai qualche tipo di repository
raccogliere un account per l’utente così tu
ottenere un optional qui forse c’è
un account per questo utente forse lì
non è e in questo caso è un
circostanza eccezionale che un utente
non ha un account predefinito questo è
il repository account predefinito
non dovrebbe succedere
ma sai non restituire nulla qui
perché non abbiamo un optional noi il
il chiamante di questo codice si aspetta sempre
account per essere valido o un’eccezione a
essere gettato questo è il modo migliore per farlo
così quando dovresti tornare ora quando
dovresti usarlo chiunque qualcuno sì bene
va bene così è fiducia e dominio-driven
il dominio di sicurezza durante la sicurezza è ottimo
L’ho usato e il progetto che ho
ha lavorato per due anni quando
usando il dominio durante la sicurezza e non posso
vedermi tornare così in movimento sul
schema non attendibile ho appena imparato questo
da un mio collega non lo so
dove ha avuto da se avesse fatto in su
se stesso o se l’ ha preso da qualche parte
da qualche altra parte
quindi fidati di un concetto di prima classe a
confini di fiducia quindi forse non lo fai
avere un modello di dominio in modo che tu non possa usare il
la principale differenza di sicurezza forse è a
chirurgia maggiore per introdurre un dominio
modella nel codice esistente che tu
avere così come sicurezza basata sul dominio
ci dà difesa come in profondità
ovunque ci sia la convalida in corso
ovunque
il modello non attendibile presto entrerà nel
il confine di fiducia stesso è come un
difesa perimetrale quindi diamo un’occhiata
dare un’occhiata a questa funzione foo è
tranne qualche barra e corda e questo
lo convalida e poi fa qualcosa
con esso così la cosa qui c’è a
Confida il confine qui perché c’è
convalida in corso non ci fidiamo di bar
noi lo convalidiamo e poi facciamo qualcosa
con esso bene non possiamo vederlo davvero
oltre al loro essere in un’eccezione
essendo stati lanciati non c’è nulla che ci dica
come tuttavia dove la barra è attendibile o
non affidabile quindi una cosa semplice che possiamo voi
fare ciò che è veramente utile è solo
rinominandolo se sappiamo che qualcosa è
non attendibili andremo avanti e rinomineremo
a persone non fidate e lo so
viola ogni linea guida di denominazione e
c-sharp ma a chi importa questo è davvero
utile
così il primo passo annota il tuo
variabili con underscore non fidato e
diventa solo molto più chiaro di quello che tu
fiducia e cosa non ti fidi di dove
riponi la tua fiducia quindi se guardi
questa funzione qui è qui che hai
un’altra funzione che fa qualcosa
con una barra e una rana potrebbero avere alcuni dati
in arrivo ma cosa sta succedendo qui
perché ci fidiamo dei dati, ovviamente non lo facciamo
fidati degli altri quindi probabilmente
dimenticato di convalidare questo o qualcosa è
non proprio qui, quindi è bello davvero
si apre per aiutarci a vedere ciò che è di fiducia e
non mi fido di te puoi pulirti questo
sapere avere un metodo di validazione che ritorna
questa barra ortografa non fidata se fallisce
ma possiamo fare di meglio, in realtà c’è
niente qui che ci costringe a esibirci
la validazione è solo un rinominare è facile
basta assegnare a sapere di chiamare il
la funzione fa qualcosa con con
invece non fidato con l’ on trust
perché è ancora una stringa che possiamo usare
il sistema di tipo per questo che ne dici
qualcosa di simile sembra migliore
Giusto, abbiamo preso la nostra corda
e metterlo in una scatola non sicura e
quello che vogliamo fare è quello che vogliamo fare
certo che non possiamo ottenere la stringa
della scatola non fidata senza fare
convalida così come possiamo fare di questo let
dai un’occhiata a questa classe non fidata così
è solo un semplice wrapper generico qui
solo detiene il valore e come un getter si
può ricavarne il valore da chiunque
vedere qualcosa di strano con questo oggetto
sembra utile che scuoti la testa
scusa si, non c’è davvero getter
c’è se c’è un getter privato così
non c’è modo di ottenere il valore
una volta che hai messo il tuo valore in questo
scatola non fidata ci resterà
per sempre così come lo usi bene?
c-sharp ha questa cosa gli interni
visibile all’assemblaggio diretto
assemblee in c-sharp è come una specie di
come i file jar in Java è il
unità di imballaggio per le classi e per te
posso dire un assemblaggio o puoi dire
che io me come assemblea vorrei
piace avere i miei interni
visibile a quest’altra assemblea quindi se tu
nell’assemblea che contiene il
classe non fidata ha un direttore che
Dice che i miei interni sono i miei privati
metodi dovrebbero essere classi private
visibile quindi all’assembly di convalida
nel frattempo possiamo avere nel frattempo
assemblaggio di invalidazione un validatore che
puoi scegliere un metodo
convalida che accetta un valore non attendibile
e fa un metodo di utilizzo o modello qui
metodo astratto chiamato inner validate
dove può ottenere il valore perché il
sono interni della classe non fidata
visibile all’assembly di validazione così
l’assemblea di convalida è l’ unica
che può ottenere il valore e ora tu
puoi costruire i tuoi validatori da
questo validatore di base devi solo
ereditare da questo validatore e inserire
la stessa assemblea e lui può fare cose
come questo in modo da avere un non sicuro
entrando è chiaro che guardi
il codice non è affidabile è nella scatola
non possiamo accederci se non lo eseguiamo
attraverso un validatore quindi dobbiamo scrivere
un numero di conto di validatore che abbiamo
per arrotondare scrivere un metodo di convalida così
non c’è modo si può dimenticare questo di
Certo , puoi solo scrivere un do-nothing
validatore che torna appena al
oggetto che sai che poi sei
sparandosi nel piede
non sei tu
così abbastanza utile ti impedisce di
dimenticare di fare la convalida rende il
confine di sicurezza il confine di fiducia
chiaro e ti costringe a fare la convalida così
il fatto è che devi scrivere
un po ‘di codice colla per farti andare
devono riconoscere dove ti fidi
confini e voi su questi oggetti
chiunque voglia lavorare con il C ++ qui
sì, se questo modello è davvero
adatto per C ++ è meglio perché C ++
ha classi di amici che ti fanno
può rendere più visibile la visibilità
granulare invece di avere il tutto
assemblaggio aperto e ha anche implicito
costruttori che significa che non hai bisogno
un codice di colla che il compilatore capirà
che c’è un modo per me di costruire
un oggetto non affidabile e passarlo dentro
questa funzione quindi è necessario il codice della colla
quindi se stai facendo C ++ dai un’occhiata
questo modello
quindi questo è il modello non attendibile , quindi noi
parlato del dominio di fiducia Dermer
sicurezza e il modello non fidato I
devono bere acqua
next up immutabilità che cos’è
immutabilità significa che qualcosa può
cambiare qualcosa che è immutabile
non cambiare è il contrario di
mutabile che significa qualcosa che può
cambiare così roba passata su un trust
confine, indipendentemente dalla direzione dovrebbe
non essere in grado di cambiare più tardi perché bene
questa è la tua applicazione
concorrenza forse hai molti thread
come si fa che influenzano la convalida se il
la cosa che hai appena convalidato può cambiare
sarà ancora valido
quanti ne hanno sentito di questo tempo di controllo –
tempo di utilizzo un eroe buono – tu sei
tutto per sapere del tempo di controllo
il tempo di utilizzo parla se vuoi
l’hai visto un miliardo di volte
ovunque ma probabilmente non lo hai fatto
Ci ho pensato
ecco una tipica chiacchierata qui a
tempo di controllo controlliamo se questo è un problema
l’account contiene la quantità di denaro
che vogliamo trasferire e poi noi
usalo ora di controllo – ora di utilizzo
puoi avere problemi qui
e se l’ammontare è mutabile può essere
cambiato e abbiamo un multi-thread
applicazione bene qualcosa di simile
potrebbe succedere dopo aver effettuato il controllo
un altro nodo di un filo che stiamo usando
per qualche motivo e poi l’ha attaccato
capito che lui lui o lei può
bombarda l’applicazione con le chiamate
impostando il valore su un milione di euro e
se il tempo è giusto questo valore impostato il
setter sarà chiamato subito dopo il
controllare ma prima dell’uso così anche se
abbiamo un assegno siamo ancora vulnerabili
perché l’importo non è l’oggetto
immutabile può cambiare e può essere
cambiato da un’altra discussione quindi anche se
pensiamo di essere buoni cittadini e abbiamo
controllato questo, lo faremo ancora
fregato quindi come risolvi questo bene
rendere interno rimanere
finale immutabile è la parola chiave finale
in Java sola lettura in c-sharp e sbarazzarsi
di questi setter
non c’è setter qui e lo so
Java e c-sharp non sono immutabili
le lingue intrinseche ci sono
lingue al giorno d’oggi e in particolare il
lingue funzionali che siamo
l’immutabilità è come una prima classe
il concetto ti obbliga ad avere tutto
immutabile e se vuoi farlo
qualcosa di mutabile dovresti saltare
attraverso un sacco di cerchi forse sei tu
non posso nemmeno farlo ma ciò non significa
non dovresti sforzarti di spremere
immutabilità in Java o la si conosce il
normale linguaggio orientato agli oggetti che può
essere fatto non è come andare contro il
il grano può essere fatto è un po ‘
più complicato di quanto dovrebbe essere
ma è sicuramente vale la pena di farlo
perché immutabilità in modo significativo
riduce i problemi di parlare come lo vedi
gioca molto bene con dominio durante
parallelizzazione della leggibilità di sicurezza
fonte di eventi, ecc immutabilità ecc
una cosa grandiosa è come uno spray di sicurezza
possono spruzzare sul tuo codice e tu
avere meno problemi a chi in quanti
qui sa che una condizione di gara è sì
Sì, sì, tutti, allora lo sapete
condizione di gara è che se il risultato di
alcune operazioni dipendono dall’ordinazione
o sequenza di eventi che si trovano all’esterno
del tuo controllo corrono contro ciascuno
altro poi hai una condizione di gara
vediamo un tipico esempio web qui di
questo immagina un flusso magico come te
avere un carrello della spesa o forse qualcosa
sul tuo sito web è come un tre passi
flusso così nel primo il cliente
va alla prima pagina sì che è un
primo passo ok prima voglio solo
menzione qui sì statico tutto il tuo
persone consapevoli di concorrenza che pensi oh io
la rete non dovrebbe mai avere una statica
variabile nella mia applicazione web che è
pazzo ma puoi immaginare che tu abbia
una sorta di iniezione di dipendenza
contenitore che è un singleton
invece questa classe quindi sarebbe solo
essere una variabile membro regolare così
non sarebbe così ovvio, ma puoi farlo
finiamo sempre con queste situazioni dove
in effetti hai una statica o un singleton
così nel primo passo
l’utente entra nell’applicazione tu
assegnare una chiave in grado di classificare o un UID in
Java e si creano alcuni dati della procedura guidata
questo contiene le cose di cui hai bisogno
tieni traccia di loro facendo la transazione
e quindi si restituisce la chiave in modo che il
l’utente può fornire la chiave e la query
stringa forse nella prossima chiamata secondo
passo è che si si sceglie un prodotto così
hai impostato l’ ID prodotto qui per alcuni
prodotto che l’utente sceglie e il
terzo passo è specie come cassa
passo ID raccogli i dati della procedura guidata
vedi che ok ha l’utente
l’accesso a questo prodotto può comprarlo
prodotto e poi fai qualcosa con
e qui hai il tempo del check-in
la cosa del tempo di utilizzo sta andando così è facile
vedere dove questo sta andando solo così nessuno
può vedere cosa c’è che non va qui cosa può fare
potrebbe andare storto come può un utente malintenzionato
a sa che il codice sembra un po ‘come
questo cosa poteva fare o lui cosa?
se facciamo questo e se l’utente bombarda
la nostra applicazione con chiamate in due fasi
due con qualche altro ID prodotto che lui
sa che non dovrebbe avere
accesso a, ma giusto prima del check- out
devi solo far esplodere l’applicazione
con le chiamate al passaggio due e forse se il
tempistica è esattamente giusto finirà
dopo il controllo ma prima dell’uso così
questo utente avrà accesso a questo
prodotto segreto che non avrebbe avuto
accesso a così come lo aggiustiamo
immutabilità, naturalmente, guardiamola
di nuovo sembra più o meno lo stesso
ora abbiamo qualcosa chiamato immutabile
dati qui sopra passo 1 tutto è il
stesso
dati immutabili step 2 ecco il
differenza se qualcosa è immutabile noi
Non può cambiare
non c’è setter per questo prodotto
quindi dobbiamo creare un nuovo oggetto così noi
ho scritto un metodo di convenienza chiamato
clonare con ID prodotto che lo indica
prende tutte le proprietà che questo
l’oggetto li ha clonati e poi con a
nuovo ID prodotto che puoi immaginare
ci sono altre proprietà su questo oggetto
ad eccezione del passaggio 3 ID prodotto
esattamente la stessa
non c’è
cosa nulla è cambiato qui e là noi
hanno ancora un tempo di controllo – tempo di utilizzo
dove lo abbiamo sempre, ma ora noi
non avere problemi perché i dati sono
immutabile non importa quanti
i thread provano a cambiare o un passaggio di chiamata
in mezzo qui creeranno solo un
nuovo un oggetto data che non viene utilizzato
adesso al terzo passaggio, quindi siamo al sicuro
nulla cambierà tra il tempo di
controllare – tempo di utilizzo in modo immutabilità come
Ho detto che uno spray di sicurezza è fantastico
cosa ti aiuta con sicurezza e
bug e concorrenza in generale vanno
usa la mutabilità il più possibile
dovrebbe essere la norma quando vedi un
oggetto che è mutabile dovresti tu
dovresti rabbrividire e sentirti male perché tu
sappi che è pericoloso quello che puoi fare
è ovviamente qualcosa deve essere
immutabile a volte da qualche parte probabilmente
qualcosa deve cambiare, ma prova a provare
per contenerlo cerca di minimizzarlo, forse
avere un oggetto più grande dove se ne hai
20 proprietà forse solo tre di loro
sono mutabili e ben tengono conto del mutabile
oggetto e tienilo isolato così da te
puoi averlo sai dov’è e te
sapere dove si trova lo stato mutabile
Mabley può essere refactored più tardi o a
Almeno hai un controllo migliore di dove
lo stato mutabile è che ti aiuterà a
tanto che era immutabilità ora andiamo
parla del modello finale che siamo
parlerò di oggi è chiamato
il modello dell’invito vitale è a
pessimista va bene, quindi qual è l’inverso
lasciato il modello di allenatore della vita prima di guardare
a questo dobbiamo guardare l’anti
modello che è chiamato un life coach
modello sembra qualcosa del genere
vedrai e forse avrai scritto una funzione
che inizia così e si può solo
ascolta il life coach ascoltarti amico mio
non hai fatto nulla ma tu sei un
successo la vostra vita sta andando essere grande senza
importa cosa succede nel mucchio di codice
qui torneremo e tu lo farai
avere successo e anche se tu lo fossi
ti addebiterò comunque che è così
E ‘fantastico essere un life coach
fantastico quindi cosa succede qui cosa può
capita qui, naturalmente, è qualcosa
va storto qui
e tu sei tornato prematuramente e successo
è ancora vero il client del tuo codice
penserà che tutto è andato bene
quando non è stato questo tipo di cosa
è successo quello che si chiama goto fail
se ti ricordi che qualche anno fa noi
su OS X andare a fallire Baggett scavalcato il
la convalida del certificato era un caso del
modello di allenatore di vita quindi questo è quello che
dovrebbe sembrare dovrebbe essere un pessimista
tu non hai fatto nulla che tu sia
non è un successo, ma devi dimostrare
te stesso in un sacco di codice devi andare
attraverso di esso e forse se sei bravo tu
uscire dall’altra parte come un successo
ovviamente abbiamo usato questo non è molto
dominio mi dispiace esempio orientato agli oggetti noi
utilizzare oggetti invece falliscono velocemente e forza
un sentiero stretto come il successo
fallire velocemente significa che se provi a farlo
la convalida prima e se qualcosa è
non è valido lanciare un’eccezione c’è
un sacco di codice in corso e poi tu
restituire i dati e l’ unico modo di
uscire da questa funzione è
restituendo un oggetto dominio valido non c’è
nessun successo vero o falso parametro qui
o lanci un’eccezione o tu
restituire un oggetto dominio valido non c’è
altro modo per farlo quando si applica
questo questo modello per il codice del codice
inizierà ad assomigliare molto a questo
hai qualche convalida se de da da
de yada yada buttare se non questo poi
buttare questo non questo e quindi lanciare il codice
succede e ritorna non sto dicendo questo
dovresti sempre usare un singolo ritorno
affermazione che non è uno che dice multiplo
le dichiarazioni di ritorno delle rotte vanno bene nel
lingue che stiamo usando ma sono solo
dicendo che se il tuo codice appare così
probabilmente è buono se il tuo codice sembra
così potrebbe essere che non è così buono
non sto dicendo che è sicuramente il mio disegno
funzioni che assomigliano a questo e quello
sono perfettamente bene ma sai ancora se
usi questo schema che ti aspetti
le tue funzioni sembrano molto più simili
nell’esempio precedente in cui si dispone
queste sezioni di convalida che tu
avere il codice e poi si ritorna
qualcosa così ti dai da dare
codice uno stretto percorso impegnativo di
successo dove o si getta un
eccezione o si restituisce un dominio valido
l’oggetto è l’inverso allenatore della vita
modello
sì, abbiamo circa 10 minuti
buona Sono cose avvolgere gonna fino Ho
ci sono cinque cose da portare a casa con
tu da questa sessione prendi in considerazione il tuo
i confini di fiducia sono importanti
parte
vedi molti problemi di sicurezza si riducono a un
scarsa comprensione di dove sei
ponendo la tua fiducia che vuoi minimizzare
dove posizioni la tua fiducia che vuoi
fidati il ​​meno possibile in cui sei
all’interno della circolare crediamo in tutto
fidato al di fuori del suo non sicuro
l’area non fidata è praticamente infinita
dove il fidato è limitato e tu puoi
controllalo con whitelisting
la sicurezza basata sul dominio è un ottimo modello
se hai già un design guidato da domini
nella tua applicazione vai avanti e guarda
nel dominio delle tue insicurezze che non sei
me ne pentirai
solo su un dominio oggetti non primitivi
i tipi non sono affidabili, è molto facile
molto semplice ma ha un profondo in
impatto sulla tua applicazione lo farà
darti immutabilità a difesa della profondità
dovrebbe essere la norma cerca di fare tutto tuo
di base immutabile se vedi qualcosa
mutevole
sai, pensa profondamente che questo deve essere fatto
essere mutabile è davvero una ragione o è
c’è un oggetto immutabile che
vuole uscire da questo per me provare a
usalo ovunque nella tua applicazione
usa il modello Builder per invece di
impostazione delle proprietà nei tuoi costruttori
invece di avvicinarsi a un oggetto e poi
l’impostazione di dieci proprietà usa un costruttore
modello che ti consente di costruirlo in modo piacevole
modo e quindi crea un oggetto immutabile
sì, ora è un sacco di cose da non usare
non usare facoltativo lanciare un’eccezione se
qualcosa è una circostanza eccezionale
non passare intorno nulla ok ora facciamolo
dì che è un costrutto che alcune lingue
bisogno di avere non significa che devi
usarlo bene e, ultimo ma non meno importante, il fuoco
allenatore della vita non hai bisogno di loro okay è
meglio essere un pessimista e assumere
fallimento e forza a
percorso di successo e mi piacerebbe concludere
qui con le parole di Gesù Cristo nostro
Signore e Salvatore, penso che l’abbia detto meglio
quando ha detto che il cancello è largo e
la strada è ampia che porta a
distruzione ma il cancello è piccolo e
la strada è stretta che porta al tuo
codice che restituisce un oggetto dominio valido
questo è quello che ha detto è vero 2000 anni
fa e pochi sono i percorsi di codice che trovano
questo cancello quindi voglio ringraziarti molto
molto per ascoltare e spero che tu
ho imparato qualcosa che puoi portare a casa
con te e applica al tuo codice
immediatamente e ti dà un robusto
codice robusto e sicuro e per favore
ricorda di votare questa sessione e se tu
vuoi contattarmi puoi twittare me e
c’è un blog truseq che
dove scriviamo cose interessanti
Penso di non essere affatto prevenuto , quindi si
e grazie mille per l’ ascolto
io grazie, ok, per fortuna o
purtroppo troppe domande tramite il
app in realtà per fortuna ma non possiamo
chiedile a tutti quindi per favore chiedi a andreas
dopo ho appena scelto l’idea
del modello principale per il passaggio dei parametri
è buono ma è o produce anche a
un sacco di memoria in testa come possiamo
bilancia bene che penso che tu ne abbia bisogno
chiediti se il ricordo ha avuto un
problema per l’applicazione questi questi sono
tipicamente oggetti di breve durata facilmente
raccolti dal garbage collector non
di solito non è un problema se stai lavorando
con forse trading o giochi siamo anche noi
eccezioni è un problema di prestazioni saggio
così come gli oggetti sì forse hai un
problema ma probabilmente lo sei
programmazione in C ++ comunque mi ritengo che
tu tu la domanda di prestazione
va sempre bene ma è sempre così
più facile da fare
siamo così entusiasti di fare premature
ottimizzazione, ecco perché dico di no
avere paura di creare un sacco di oggetti I
non pensare che sarà un problema se
hai un tipico se hai uno speciale
dominio dove questo è il problema
bene sai che hai bisogno di trattare con esso
ma la maggior parte forse si pensa di fare, ma io
penso sia più probabile che tu non lo faccia
questa è la mia risposta
ok mm hai usato scorte immutabili
mentre si implementa il main driven
titoli no
cosa succede se un oggetto dominio non può validare
stesso perché ha dipendenze
qualunque sia il minimo che non puoi convalidare
stesso perché è dipendenze bene io
non so quali dipendenze potrebbero
non stai chiamando un servizio da un
oggetto del dominio è tutto ciò che puoi passare
un servizio
beh, la cosa più ovvia che faccio di solito è
convalidare se stessi posso creare il
la persona che fa la domanda forse ha un
esempio concreto sì, possiamo parlare
questo dopo la domanda, ma il
dipendenze che i tuoi oggetti di dominio
devono essere essi stessi validi
già se sono oggetti dominio così
di solito funziona bene e l’ultimo
uno gli oggetti del dominio che hai mostrato loro
sono in realtà i tipi di valore okay sì angolo
è più di un valore tipo okay, sì buono
ok questo è tutto
la ringrazio molto grazie grazie

Please follow and like us: