Nasazení PyWebIO na produkčním webu

CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Nasazení PyWebIO na produkčním webu
« kdy: 15. 04. 2022, 01:34:24 »
Hoj,

vyšel tu moc pěkný článek o PyWebIO.

Líbila by se mi kombinace Python, Flask plus PyWebIO.

Nicméně v profilu PyWebIO se píše:
Web developers to quickly prototype a demo or MVP.
Software teams to build internal tools.

...takže na prototypy, dema, interní nástroje a podobně.
O rychlosti to není, přímo na webu PyWebIO rychlost vychvalují a funguje to poměrně dobře...

Tak proč ne na normální web? Má to nějaké problémy s bezpečností?
« Poslední změna: 15. 04. 2022, 13:10:12 od Petr Krčmář »


Zopper

  • *****
  • 657
    • Zobrazit profil
Re:Nasazení PyWebIO na produkčním webu
« Odpověď #1 kdy: 16. 04. 2022, 10:34:56 »
Bezpečnostní problémy asi ne, to by pak nebylo ani na ty interní nástroje. Aniž bych znal ten konkrétní projekt, tak pár možností:
- Rychlost vývoje a běhu v malé zátěži je jedna věc, škálovatelnost na tisíce současných přístupů, masivní paralelismus nebo dokonce běh na více serverech je věc druhá, a tenhle projekt se soustředí jen na tu první skupinu.
- Dlouhodobá stabilita. U produkčního nasazení je často důležité, aby byl projekt podporovaný i za spoustu let, a poskytoval opravy chyb (hlavně bezpečnostních) bez nutnosti každé dva roky všechno přepisovat na novou verzi.
- Nebo to autoři ještě pořád považují za relativně časný stav vývoje, kdy můžou přijít větší změny, nebo se odhalit problémy. A prostě si nevěří na to, aby doporučili nějaké větší produkční nasazování.

Re:Nasazení PyWebIO na produkčním webu
« Odpověď #2 kdy: 16. 04. 2022, 11:55:05 »
- každé otevřené okno bere několik MB paměti - ta oboustranná komunikace mezi pywebio a klientem není dobře řešena
- aplikace není odolná proti DoS a řada volání jí umí přetížit

Nejvíc pravděpodobný je ale důvod, že vývojáři nechtějí řešit podporu, dávají nástroj vývojářům a ti ať si sami určití, jestli  to je na produkci nebo ne. Podobně to je u všech dalších obdobných nástrojů.

CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Nasazení PyWebIO na produkčním webu
« Odpověď #3 kdy: 16. 04. 2022, 14:49:55 »
Vaše názory dávají smysl.
Vypadá to jako rozumné vysvětlení.
Dík kluci.

Když to otočím, tak pokud bych to použil na rychlé vytváření a zpracování formulářů, které jsou dostupné až po přihlášení, nemuselo by to zásadně vadit.

Re:Nasazení PyWebIO na produkčním webu
« Odpověď #4 kdy: 16. 04. 2022, 18:47:23 »
Vaše názory dávají smysl.
Vypadá to jako rozumné vysvětlení.
Dík kluci.

Když to otočím, tak pokud bych to použil na rychlé vytváření a zpracování formulářů, které jsou dostupné až po přihlášení, nemuselo by to zásadně vadit.

U nas to tak funguje, ale to je de facto intranet, kde neresime pretizeni (ve smyslu tisicu pozadavku za sekundu nebo dokonce cileneho utoku), ale spis chceme velkou rychlost adaptace zmen v tech formularich. A ta je skvela pro nas tym (tedy nemusime cekat par sprintu, az se UI team rozhoupe, oni maji svoje heavy weight technologie a ty se pro nase potreby nehodi).

Jak pises, pokud si vyresis nejake prihlasovani (nebo SSO jako u nas), potom to klidne nasad. Prinejhorsim to hodis za nginx, ale IMHO to ani nebude potreba.


Re:Nasazení PyWebIO na produkčním webu
« Odpověď #5 kdy: 16. 04. 2022, 18:49:31 »
- aplikace není odolná proti DoS a řada volání jí umí přetížit

Myslíš konkrétní věci z PyWebIO, které vedou k přetížení nebo obecně, že to prostě jde zaDoSovat (to jde ale cokoli). Pokud se to nasadí za nginx, tak IMHO to je vcelku ok že?

CPU

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Nasazení PyWebIO na produkčním webu
« Odpověď #6 kdy: 16. 04. 2022, 19:10:44 »
Tak v produkci by měl být python za něčím jako Nginxem vždy ne?
Ale spotřebu zdrojů to významně nezlepší.

Formálně je lepší rozložit zátěž:
- proxy řeší https spojení, ochranu před vybranými útoky a podávání věcí z cache (obrázky, styly)
- druhý stroj pak řeší aplikační logiku

Takové rozdělení má pár výhod.
Primár může jet jen z ramdisku, fakticky uzamčený, disk přimapovaný RO nebo start RW a přepnutí na RO, další pártice pro cache sice RW a nic z ní nejde spouštět, firewall blokuje všechno mimo 443 a přístupu do DMZ. Dá se to prostřelit, protože požadavky se parsují v aplikační logice, ale ten co je vystavené ven, to může i amatér nastavit celkem dobře.
« Poslední změna: 16. 04. 2022, 19:18:53 od CPU »

Re:Nasazení PyWebIO na produkčním webu
« Odpověď #7 kdy: 19. 04. 2022, 08:41:23 »
- aplikace není odolná proti DoS a řada volání jí umí přetížit

Myslíš konkrétní věci z PyWebIO, které vedou k přetížení nebo obecně, že to prostě jde zaDoSovat (to jde ale cokoli). Pokud se to nasadí za nginx, tak IMHO to je vcelku ok že?

Myslím konkrétně např. to jejich parsování commandů z prohlížeče, hooodně zanořený json udělá pěkné tornádo (i v tornadu jako backend).

Předřadit nginx je tak trochu na nic, když tornado nebo aiohttp jedou přes websocket, tj. terminují si SSL spojení sami a tady je další slabina v podobě dost nebezpečné implementace SSL.

Ok, použiji flask/django a pojedu jen před http polling a tady přesně se zvednou odezvy aplikace, zvýší spotřeba paměti a problém se špatně ošetřovanými command objekty zůstává.

Před pár lety dostal jeden z našich operátorů políček v podobě průniku přes pywebio i v interní síti. Skončilo to nasazením Apache knoxu na sanitizaci vstupu a výběrkem nového CRM, který dodavatě postavil na mongu, takže to probíhá doteď…

Re:Nasazení PyWebIO na produkčním webu
« Odpověď #8 kdy: 26. 05. 2022, 08:19:58 »
K dspozici až po přihlášení – záleží. Pokud nějaké úzké skupině, která nebude mít zájem DoSovat, tak OK. Pokud bude otevřená registrace, tak je přihlášení celkem jedno. Na nějakém nadšeneckém webu pro pár lidí to může být z hlediska DoSu stále OK (motivace pro DoS malá, potenciální škoda též malá z běžný provoz malý). Nevím, jak z jiných hledisek.

Ad Nginx – souhlas, že minimálně kvůli TLS (SSL snad již ne) a slow loris je to vhodné, ale nevyřeší to všechno. Jen nechápu zmínku o WebSocketu, ten přece může jít též přes Nginx, ne?