Dočetl jsem se, že se má uvádět:
Content-Type": "application/x-www-form-urlencoded
Je nutné tento content-type mít vždy tento, nebo jen při autentizaci/refresh_token atd?
Mám problém s tím, že mi nejdou posílat requesty na server, když ta data jsou v body. Spring mi to nebere:
Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]
Za předpokladu, že použiji:
application/json
Tak je vše v pohodě...
Content-Type určuje, v jakém formátu odesíláte data na server (a opačně v hlavičkách odpovědi říká, v jakém formátu je odpověď). Pro data posílaná v těle požadavku při OAuth je správný typ
application/x-www-form-urlencoded – data se posílají, jako by to byl vyplněný HTML formulář. Spring by to v rámci autentizace měl zpracovat sám, pokud byste autentizaci implementoval sám, musí kontroler nakonfigurovat, aby tento typ dat přijímal (standardně Spring očekává data ve formátu JSON).
je nějaký doporučený způsob, jak se vypořádat s XSS na straně springu?
XSS byste měl řešit na straně view. Pokud uživatel na server odešle např. znak
<, chce, aby se ten znak zobrazil – vy byste ho tedy měl normálně uložit do databáze. Při renderování obsahu ve view pak musíte zajistit, aby se speciální znaky escapovaly – např.
< se musí vyrenderovat jako
< do zdrojového kódu HTML, protože ten znak má jinak v HTML speciální význam. Ale kdybyste chtěl ten samý text vyrenderovat třeba do PDF, nebudete řešit znak
<, protože v PDF žádný speciální význam nemá.
Řešit to na straně vstupu je špatně, protože tím měníte data, která poslal uživatel – zobrazíte pak něco jiného, než poslal. Navíc pak očekáváte, že v databázi už máte všechna data vyčištěná a zobrazujete je bez escapování, což je dost „odvážné“. Navíc escapuje se podle použitého výstupního formátu, tj. jinak se escapuje pro HTML, jinak pro PDF, jinak pro čistý text – a třeba se jinak budou escapovat budoucí verze HTML. V databázi byste tedy měl mít uložen původní vstup od uživatele, protože nikdy nevíte, jak ho budete potřebovat escapovat v budoucnosti.