Autor Zpráva
nethor
Profil
V jednou projektu doplňuji změnu hesla, přes Ajax.
V html jsou 3 inputy type=password (původní heslo, nové heslo a znovu nové heslo) + type=button Uložit.
Za letu 'onchange' se ověřuje původní heslo, kvalita nového hesla a porovnání nového hesla.

Otázka zní, jestli si můžu dovolit Ajaxem zpět vracet celý html blok s formulářem, tj. také předvyplněnými hesly ve value?
Bezpečnostní díru v tom nevidím, jednak musí být uživatel přihlášen, heslo musí znovu zadat, web jede přes https, ale stejně mi někde vzadu v hlavě cinká varování, že bych zpátky input pass s vyplněnými value posílat neměl. (Možná nějaká poučka z doby dřívější.)
Co myslíte, je to bezpečné?

Druhá možnost je posílat zpět uživateli jen případné chybové hlášky. Ale to je možná zbytečně komplikované...
Keeehi
Profil
Z hlediska bezpečnosti v tom problém nevidím. Je to stejné jako kdybys to dělal bez AJAXu a při nějaké chybě poslal zpět vyplněný formulář. Což je u normálních inputů naprosto běžné, u těch s hesly už tolik ne ale není to zase něco extrémně unikátního.
Je to tedy sice trochu zbytečné zpátky posílat formulář ve stavu ve kterém už stejně je ale vadit by to nemělo.
nethor
Profil
Keeehi:
zbytečné zpátky posílat formulář ve stavu ve kterém už stejně je
Zbytečné to není, zpátky ho posílám doplněný o chybové hlášky a zvýrazněná pole po kontrole na serveru.
breeta
Profil
nethor:
Důležité je to heslo nikde neukládat ani nepřeposílat např. mail, ale jen uložit do hash ...
Radek9
Profil
nethor:
Trochu doplním breeta. Některé servery občas mívají ve zvyku do logu ukládat obsah HTTP požadavků a odpovědí. V tu chvíli by to mohlo být zranitelné, protože se ti tam válí hesla v plaintextu. Pokud tvůj server nic takového neukládá, tak v tom bezpečnostní díru nevidím.
nethor
Profil
Díky všem za odpovědi.
Radek9:
ukládat obsah HTTP požadavků a odpovědí
Zajímavé. To mi připadá jako bezpečnostní díra sama o sobě. Uživatel na server nové heslo prostě poslat musí. (A je úplně jedno, že přes https...)
Jestli si server zapisuje POST požadavek, tak je vymalováno a myslím, že tohle ošetřit vůbec nejde.
N71
Profil *
Vracet heslo zpět uživateli není bezpečnostní problém. Není ale vhodné ho kamkoliv ukládat. A to i včetně třeba session, která je taky plaintextová, souborová a běžně dostupná všem uživatelům serveru.

POST data se na produkčních serverech nelogují.
Keeehi
Profil
Ano, co se hesel týče, je spousta míst, kde s nimi může být problém. Kdybychom tu měli rozebrat všechny, tak bychom tu byli hodně dlouho. To že posílat data zpět AJAXem by neměl být problém je teď snad už vyřešené.
Jelikož tě trápí bezpečnost a javascript už v tom stejně máš, tak bych měl takový nápad. Hesla můžeš hashovat už v prohlížeči uživatele. Má to tu výhodu, že kdyby se útočníkovi povedlo odposlechnout komunikaci, dostane sice přístup k účtu na tvém webu, ale nezjistí originální heslo uživatele. A jak víme, to je větší problém, jelikož uživatelé používají stejné heslo prakticky všude.
Ještě důležitá poznámka. Ten hash co dorazí na server se bude muset před uložením znovu zahashovat. Je to kvůli tomu, že kdyby ti unikla databáze, útočník by měl okamžitě přístup ke všem uniklým účtům. Takhle by z toho musel nejdříve získat původní hashe, což bude prakticky nemožné. Což má zase za následek to, že hashování na straně klienta musí být buď bez soli, nebo s nějakou deterministickou. Což ale ničemu nevadí, jen je potřeba na to myslet.
nethor
Profil
Ano problém je vyřešen. Paranoiou netrpím, ale podezřívat každého je asi součást programátorské profese. ... ale vše má své meze.
Zkrátka: když už to předělávám, nechci tam udělat nějakou zásadní botu.
Hashování na straně klienta mě napadlo, ale chtěl jsem si práci spíš usnadnit...
Na podnět N71 jsem zrušil ukládání do session(, neposílám jednotlivé hodnoty z inputů ale vždy všechna pole, pomocí serializeArray()).

Díky všem.
blaaablaaa
Profil
nethor:
Trochu OT, ale taky jsem viděl pár případových studií na zrušení nutnosti zadávat heslo podruhé, zvýšilo to konverze a žádosti o reset hesla zůstaly stejné. A místo toho jen zobrazit tlačítko (show/hide, ikona oka/přeškrtlého), které přepne type=password na text.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0