Ochrana DB proti přeplnění (web)

Ochrana DB proti přeplnění (web)
« kdy: 22. 12. 2014, 23:57:19 »
Zdravím.

Řeším tu takový menší problém. Mám insert-only databázi - databáze, kam se jen zapisuje a její stav je odrazem všech zápisů a přepisů novými zápisy. Mazání je také zápis informace o tom, že se něco smazalo. Je tedy k dispozici kompletní historie změn.

Jak byste takovou databázi zabezpečili proti třeba DoS útoku založeném na přeplnění databáze prakticky "spamovými" zápisy? Jak případně takový spam řešíte?

Já si dokážu nějaký techniky vymyslet, ale snažil jsem se na google najít nějaké oficiální nebo známé způsoby a doporučení a moc jsem neuspěl.

- mohu všude mít captchu
- monitorovat zápisy každého uživatele (a poslat ho do háje, pokud překročí limit)?
- měřit rychlost bobtnání databáze a při překročení limitu začít všechny zápisy zdržovat?

Nebo je nějaký jiný lék?


aaaa

Re:Ochrana DB proti přeplnění (web)
« Odpověď #1 kdy: 23. 12. 2014, 00:09:04 »
ano

Sten

Re:Ochrana DB proti přeplnění (web)
« Odpověď #2 kdy: 23. 12. 2014, 00:11:02 »
Přeplnění databáze? V době, kdy synchronizovat běžné diskové pole trvá i týden v kuse?

Re:Ochrana DB proti přeplnění (web)
« Odpověď #3 kdy: 23. 12. 2014, 01:46:56 »
Dokážu si představit útok vedoucí k tomu, že databáze bude růst megabajt za sekundu. Nejen že výsledkem bude obrovský soubor plný nesmyslů, ale i polomrtvá služba zabíjená na I/O

tdvorak

Re:Ochrana DB proti přeplnění (web)
« Odpověď #4 kdy: 23. 12. 2014, 07:40:22 »
Zápisy generují jen přihlášení uživatelé? Pak bych u registrace ponechal nějakou captchu a dál jen monitoroval, kolik zápisů generuje průměrný běžný uživatel. Podle toho pak nastavit limit pro nadměrné množství požadavků a začít třeba u každé akce nad limit zobrazovat captchu. Tak, aby to neomezovalo běžné uživatele a zkomplikovalo práci škodlivému učtu.

Ale píšeš "Dokážu si představit útok" - znamená to, že zatím řešíš jen nějaký krizový plán, co by, kdyby? Abys naopak nevytvořil úzké hrdlo celé aplikace logikou proti přetížení databáze. Možná by bylo lepší připravit se na řešení případných následků (pročistit databázi od škodlivého uživatele, zablokovat účet), nastavit monitoring a problém pak řešit ručně.

Pokud nastavíš limit požadavků za hodinu, bude útočník dělat požadavky pomaleji ale o to déle. Databázi zaplní tak jako tak a ty budeš mít falešný pocit bezpečí.


karel

Re:Ochrana DB proti přeplnění (web)
« Odpověď #5 kdy: 23. 12. 2014, 10:35:19 »
Souhlasim s prizpevkem nademnou, pokud te nekdo chce dostat dostane te, a captcha ani nic jineho v tom nezabrani jen to zkomplikuje (prodrazi) utok,
spis byt tebou si priprav scenare pripadne rutiny co a jak kdyz k tomu dojde, blokovani daneho uctu pripadne smazani veskere jeho aktivity. Nezapominej ze cileny utok se muze odehravat pres x uctu v pripade ze nekdo zjisti jake jsou limity per ucet neni tak teske prizpusobit se. Otazkou je take proc by nekdo takovy utok delal a co by bylo cilem, pokud je to odstavit tvou sluzbu pravdepodobne uspeje.

Jeste jedno reseni, pri detekovani utoku na dany ucet necham na tobe jak to detekujes jesli pocet dotazu za cas ci neco jineho, proste prestan na dotazy reagovat, tj vypni pro dany ucet log ale i akce, muzes pouzit i sleep aby odezva byla podobna jako pri uzpesnych dotazech. Utok dal na ucet povede ale to te neboli a utocnik se dostane do schyzi kde je co spatne. 

hmmm

Re:Ochrana DB proti přeplnění (web)
« Odpověď #6 kdy: 23. 12. 2014, 10:59:53 »
Ja se priznam, ze nevim. Ale jak to ma treba Wikipedie? Tam se taky loguje kazda editace. A editovat muze kdokoliv...

pičus

Re:Ochrana DB proti přeplnění (web)
« Odpověď #7 kdy: 24. 12. 2014, 02:11:08 »
při akci která se loguje dej sleep(1000) a je to

Jimm

Re:Ochrana DB proti přeplnění (web)
« Odpověď #8 kdy: 24. 12. 2014, 13:08:03 »
Děláš čest svému jménu ty šašku.

pičus

Re:Ochrana DB proti přeplnění (web)
« Odpověď #9 kdy: 24. 12. 2014, 14:27:35 »
Hlavně že ty jsi piča

Bla

Re:Ochrana DB proti přeplnění (web)
« Odpověď #10 kdy: 24. 12. 2014, 14:28:58 »
Captcha je zastaralá!
Po každém vložení zápisu do databáze tam přehraj tuhle reklamu: https://www.youtube.com/watch?v=TTUp6D9NzpU
Kdo to vydrží, MÁ SVATÉ PRÁVO na zápis.
App, já to vydržel 30 vteřin!

Jinak doporučuji další metody:
A) kontrolovat, kolik záznamů uživatel zadal - po vložení řádku vyvoláš trigr kontrolující počet zápisů tohoto uživatele vůči průměru a provedeš opatření (zdvojnásobíš čas přehrátí reklamy).

B) Měřit čas mezi posledním uložením záznamu do databáze, pokud je čas z dané IP menší než 15 vteřin, zápis neprovedeš.

C) Zobrazení obrázku pošle zápis do DB, že uživatel má právo na zápis jedné hodnoty, při zápisu do DB trigrem zkontroluješ, jestli je zápis oprávněný.