Race condition attack
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 30/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- javascript, sql
Direzione di ricerca
Inizia da src/methods.js alle righe indicate intorno a updateEntity e verifica come vengono gestiti gli aggiornamenti concorrenti. Riproduci il comportamento con richieste Promise.all parallele ed esamina il supporto alle transazioni dell’adattatore del database. Il lavoro è completato quando gli aggiornamenti concorrenti del saldo non possono produrre il risultato incoerente dimostrato, utilizzando il comportamento di transazione o di blocco supportato dal progetto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
There is such a problem as the race condition attack.
This problem is famous when using the ORM pattern as Active Record and Data Mapper.
We get a record for changes and change it outside the transaction, which means that we can execute precisely the same query in parallel.
Consider a simple attack in transferring $5 from Alice to Bob:
Get balance Alice -> $5 -> transfer to Bob -$5 -> get balance Bob -> $0 -> received from Alice +$5
And now, if two queries were running at the same time:
Query 1: Get balance Alice -> $5 (race condition!) -> transfer to Bob -$5 -> get balance Bob -> $0 -> received from Alice +$5
Query 2: Get balance Alice -> $5 (race condition!) -> transfer to Bob -$5 -> get balance Bob -> $5 -> recieved from Alice +$5
Bob has a balance of $10, and Alice has $5.
It is elementary to check this behaviour by calling the Promise.all() method, we generate ten requests and, depending on the network, and the processing speed of the database, from 2 to 10 requests will pass simultaneously.
In SQL, the first statement must be with SELECT FOR UPDATE to block against concurrent updates, or both wrapped in a SERIALIZABLE transaction isolation level.
How can we protect ourselves now?
We must wrap the updateEntity method in a transaction with isolation level SERIALIZABLE.
Or use moleculer-channels to update items in strong FIFO in Kafka.
- Lingua principale
- JavaScript
- Stelle
- 33
- Fork
- 15
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di moleculerjs/database
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
moleculerjs/database#99 ·
-
Request: TypeScript SupportApertaenhancement help wanted
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
moleculerjs/database#79 · 2 commenti ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
moleculerjs/database#75 ·
-
enhancement help wanted
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
moleculerjs/database#69 · 1 commento ·
-
Add support for Cassandra DBAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
moleculerjs/database#54 ·
Tutte le issue di moleculerjs/database
Issue simili
-
bug documentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
awslabs/visual-asset-management-system#880 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
[BUG]: Workspace settings forms stay at 50% width on narrow screens and wrap text word by wordApertapossible bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
Mintplex-Labs/anything-llm#6889 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
swc-project/swc-next#1165 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
nhsuk/nhsuk-prototype-kit-package#439 ·
I maintainer di solito rispondono entro 1 giorno