Editing
Co se stane, když podceníte paměť v Swiftu
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Stav aplikace a životní cyklus obrazovky Dalším častým zdrojem chyb je práce se stavem. V moderním Swiftu se používá kombinace struktur a pozorovatelných objektů. Pokud si nejste jistí, kde má data žít, držte se jednoduchého pravidla: stav, který se týká jedné obrazovky, patří do dané obrazovky. Stav, který sdílí více obrazovek, patří výš do hierarchie. Když to porušíte, vzniknou nekonzistence, kdy jedna část aplikace zobrazuje stará data a druhá nová. Pomůže vám také pochopit, kdy se obrazovka znovu vytváří a kdy jen aktualizuje. Právě tady se nejčastěji ztrácejí data nebo se naopak zbytečně načítají znovu.<br><br>Častou chybou je neošetřená expirace. Vždy kontrolujte claim „exp" a při vypršení tokenu vracejte 401 Unauthorized s jasnou zprávou. Pokud tokeny vydáváte více službám, nastavte správné „aud" (audience) a „iss" (issuer). Bez těchto kontrol může token vydaný pro jinou službu získat přístup tam, kam nepatří. Dále nikdy neposílejte token v URL – může se dostat do logů a historie prohlížeče.<br><br>Implementace JWT není složitá, ale chyby v detailech mají vážné důsledky. Držte se zásady nejmenšího oprávnění, kontrolujte všechny relevantní claimy a nikdy nedůvěřujte tokenu bez ověření podpisu. Pravidelný audit a testování zranitelností by měly být samozřejmostí.<br><br>Na co si dát pozor v praxi Doba platnosti tokenu by měla být krátká – typicky 15 minut až hodina. Pro delší relace použijte refresh token, který má delší platnost a lze jej revokovat. Refresh token ukládejte bezpečně, ideálně v httpOnly cookie, nikdy v localStorage. Přístupový token naopak může být v paměti nebo v cookie s příznakem Secure a SameSite. Vyhněte se ukládání citlivých údajů do payloadu – token je pouze podepsaný, ne šifrovaný, takže si jej kdokoli může přečíst.<br><br>Proveďte audit stávající sady a u každého testu odpovězte na jednu otázku: závisí výsledek na stavu mimo testovanou funkci? Pokud ne, patří do jednotkové vrstvy. Pokud ano, do integrační. Testy, které nedokážou odpovědět ani na jednu variantu, obvykle jen kopírují implementaci a nemají hodnotu – ty smažte. Počet integračních testů držte výrazně nižší než jednotkových, obvykle v poměru jedna ku pěti až jedné ku deseti.<br><br>Pro bezpečný přenos používejte výhradně HTTPS. Token v hlavičce Authorization je sice běžný, ale bez TLS jej může odposlechnout kdokoli na síti. Při nasazení za proxy nebo API bránou ověřte, že nedochází k přepisování hlaviček. Zvažte také rotaci podpisových klíčů – staré klíče nechte chvíli platné pro ověření, ale nové tokeny podepisujte klíčem novým. Tím předejdete výpadkům při kompromitaci klíče.<br><br>U síťových aplikací narazíte na zvláštní variantu copyleftu, která se spouští při poskytování služby přes síť. Pokud provozujete server a upravíte takto licencovaný kód, může vzniknout povinnost zpřístupnit zdrojový kód uživatelům služby. To bývá pro mnohé překvapení, protože si myslí, že když software nešíří jako soubor, nic neporušují. Není to pravda. Před nasazením do produkce si ověřte, jestli vaše úpravy spouštějí tuto povinnost.<br><br>JWT (JSON Web Token) je kompaktní, samostatný token, který nese informace o uživateli a jeho oprávněních. Skládá se ze tří částí: hlavičky, payloadu a podpisu. Hlavička určuje algoritmus podpisu, payload obsahuje tvrzení (claims) – např. identifikátor uživatele, roli, čas expirace. Podpis zaručuje, že token nebyl pozměněn. Token se obvykle předává v hlavičce Authorization: Bearer . Výhodou je bezstavovost – server nemusí ukládat relace, což usnadňuje škálování.<br><br>Vývoj aplikací pro iOS v Swiftu vypadá na začátku jednoduše: nainstalujete vývojové prostředí, vytvoříte nový projekt a za chvíli běží první obrazovka. Jenže skutečné problémy nepřicházejí při psaní prvního kódu, ale ve chvíli, kdy aplikace začne růst. Právě tehdy se ukáže, jestli máte pevné základy, nebo jen slepenec obrazovek, které spolu nekomunikují.<br><br>Když do projektu přidáváte cizí kód, kontrolujte kompatibilitu licencí. Ne každá licence se dá zkombinovat s jinou. Permisivní licence se obvykle snášejí s copyleftem, ale dva různé silné copylefty vedle sebe často skončí konfliktem. Veďte si seznam závislostí i s jejich licencemi. Automatické nástroje sice mnohé odhalí, ale neposoudí, jak přesně kód používáte, a právě na tom záleží.<br><br>Kontrola nestačí jednorázově. Nové dotazy vznikají při každé změně a je snadné zapomenout na parametrizaci právě tam, kde se přidává filtr nebo export. Proto se vyplatí zavést pravidlo, že přímé spojování vstupu do SQL se v kódu vůbec nesmí objevit, a to i v pomocných funkcích a testech. Pravidelná revize dotazů a testování s neobvyklými vstupy odhalí slabá místa dřív než útočník.
Summary:
Please note that all contributions to Madagascar are considered to be released under the GNU Free Documentation License 1.3 or later (see
My wiki:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
English
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Search
Getting Madagascar
download
Installation
GitHub repository
SEGTeX
Introduction
Package overview
Tutorial
Hands-on tour
Reproducible documents
Hall of Fame
User Documentation
List of programs
Common programs
Popular programs
The RSF file format
Reproducibility with SCons
Developer documentation
Adding programs
Contributing programs
API demo: clipping data
API demo: explicit finite differences
Community
Conferences
User mailing list
Developer mailing list
GitHub organization
LinkedIn group
Development blog
Twitter
Slack
Tools
What links here
Related changes
Special pages
Page information