Autor | Zpráva | ||
---|---|---|---|
jenikkozak Profil |
Moderátor Chamurappi: Vytrženo z md5 decrypt.
Odesílání nezašifrovaného hesla na e-mail není dobrým nápadem. Uživateli tak ukazuješ, že ti nezáleží na jeho údajích, které má u tebe uložené, neboť do schránky se mu může někdo dostat, pak do vyhledávání napíše „heslo“ a vyběhnou mu všechny registrace, kde je dotyčný zaregistrován. Tvůj způsob zjišťování, zda je v nějakém záznamu v databázi uveden nějaký e-mail není nejekonomičtější, neboť z databáze vytahuješ všechny údaje z daného řádku (nevím teda, kolik jich obsahuje) jen proto, abys tento řádek sečetl. |
||
panther Profil |
#2 · Zasláno: 13. 7. 2010, 10:27:40
jenikkozak:
„Odesílání nezašifrovaného hesla na e-mail není dobrým nápadem.“ a jak jinak máš předat heslo? V databázi je uložen hash, ale uživatel zadává heslo v plain textu. Povídáš nesmysly (tobě někdy na mail přišel 40-místný hash?). „neboť do schránky se mu může někdo dostat“ to je věc každého, jak si cení hesla ke svému e-mailovému účtu a jak moc silné heslo má. „pak do vyhledávání napíše ‚heslo‘ a vyběhnou mu všechny registrace“ ??? |
||
jenikkozak Profil |
#3 · Zasláno: 13. 7. 2010, 11:09:27
Sice to do tohoto vlákna úplně nepatří...
panther: „a jak jinak máš předat heslo? V databázi je uložen hash, ale uživatel zadává heslo v plain textu. Povídáš nesmysly (tobě někdy na mail přišel 40-místný hash?).“ Podle mne není důvod uživateli posílat jeho heslo. On ví, jaké si zvolil a překlep neudělal (proto se přece heslo zadává dvakrát). Zapomene-li své heslo, pak se po zadání jeho e-mailové adresy na tuto pošle hash, po jehož použití je mu heslo změněno na jeho nově zvolené. Opět není nutné mu toto heslo znovu posílat na e-mail. Má-li uživatel v e-mailové schránce vyhledávání, po vyplnění výrazu „heslo“ mu (nebo útočníkovi) se vypíší všechny české servery, na nichž je tento uživatel registrován. Pro anglické je to anglický ekvivalent tohoto slova. Nepovažuji proto tento způsob za bezpečný. Jedná se však o můj osobní názor. Což však nemusí znamenat, že „povídám nesmysly“. |
||
Chamurappi Profil |
#4 · Zasláno: 13. 7. 2010, 11:18:08 · Upravil/a: Chamurappi
Reaguji na jenikakozaka:
„Zapomene-li své heslo, pak se po zadání jeho e-mailové adresy na tuto pošle hash, po jehož použití je mu heslo změněno na jeho nově zvolené.“ Stejným způsobem si může nechat změnit heslo útočník, který má přístup do mailu. „Má-li uživatel v e-mailové schránce vyhledávání, po vyplnění výrazu ‚heslo‘ mu (nebo útočníkovi) se vypíší všechny české servery, na nichž je tento uživatel registrován.“ 1) Všechny maily, v nichž mi je obsaženo jakékoliv nové heslo, je buď rozumné nearchivovat, nebo (raději) si heslo v nich obsažené změnit — obojí může ten zaslaný mail s novým heslem doporučovat. 2) Když budeš uživateli psát mail, že mu posíláš hash, po jehož použití si může změnit takovou tu tajnou a blíže nejmenovanou věc, pomocí které se přihlašuje, tak to část obyčejných uživatelů nepochopí. Musíš použít pojem, kterému lidi rozumí, a ten už bude vyhledatelný. |
||
panther Profil |
#5 · Zasláno: 13. 7. 2010, 11:24:00
jenikkozak:
„Což však nemusí znamenat, že ‚povídám nesmysly‘.“ znamená, protože se bavíme o novém, náhodně generovaném, hesle pro případ, že uživatel své původní heslo zapomene. Přečti si i příspěvky napsané výše. Na email se ti pošle náhodné heslo, které si pak změníš. To se už nikam neposílá. |
||
jenikkozak Profil |
#6 · Zasláno: 13. 7. 2010, 11:25:23
Chamurappi:
„1) Všechny maily, v nichž mi je obsaženo jakékoliv nové heslo, je buď rozumné nearchivovat, nebo (raději) si heslo v nich obsažené změnit — obojí může ten zaslaný mail s doporučovat.“ Má-li si uživatel heslo stejně měnit, proč bych mu posílal to provizornní? „2) Když budeš uživateli psát mail, že mu posíláš hash, po jehož použití si může změnit takovou tu tajnou a blíže nejmenovanou věc, pomocí které se přihlašuje, tak to část obyčejných uživatelů nepochopí. Musíš použít pojem, kterému lidi rozumí, a ten už bude vyhledatelný.“ Napíšu mu, že heslo změní kliknutím na odkaz, kde budu metodou get předávat nějaký vygenerovaný hash, abych ověřil, zda tam přichází ze své adresy. Jde o to, že mu nebudu do e-mailu uvádět jeho heslo, abych ho tam přímo podsouval i náhodnému útočníkovi. Vždyť víte, že připojování ve školách a dalších institucích nemusí být nejbezpečnější. |
||
Joker Profil |
#7 · Zasláno: 13. 7. 2010, 11:25:53 · Upravil/a: Joker
jenikkozak:
„Zapomene-li své heslo, pak se po zadání jeho e-mailové adresy na tuto pošle hash, po jehož použití je mu heslo změněno na jeho nově zvolené. Opět není nutné mu toto heslo znovu posílat na e-mail.“ …což je to samé jako mu vygenerovat a poslat nové heslo. Jediný argument který v tom vidím, že pro větší bezpečnost by po vygenerování hesla měl uživatel být přinucen si heslo změnit (což podle mě stejně udělá, protože většinou nebude chtít používat to náhodně vygenerované heslo) dodatek: „Jde o to, že mu nebudu do e-mailu uvádět jeho heslo“ Ale vždyť to heslo tam stejně je! Jen mu říkáte „hash“ a ne heslo. |
||
jenikkozak Profil |
#8 · Zasláno: 13. 7. 2010, 11:31:29
Omlouvám se, uvědomuji si, že jsem se špatně vyjádřil. Uživateli po zapomenutí jeho hesla nebudu posílat hash v url, ale token, ano tak se tomu říká. Po jeho použití si heslo změní, toto se mu nebude už na e-mail posílat.
|
||
Chamurappi Profil |
#9 · Zasláno: 13. 7. 2010, 11:32:54 · Upravil/a: Chamurappi
Reaguji na jenikakozaka:
„Má-li si uživatel heslo stejně měnit, proč bych mu posílal to provizornní?“ Protože to staré zapomněl, viz první dzambova věta. „Napíšu mu, že heslo změní kliknutím na odkaz“ Čímž se útočník hledající pojem „heslo“ také dozví, kde je jeho oběť registrována, tam klikne na „zapomněl jsem heslo“, dostane do mailu |
||
jenikkozak Profil |
#10 · Zasláno: 13. 7. 2010, 11:37:51 · Upravil/a: jenikkozak
Chamurappi:
„Protože to staré zapomněl, viz první dzambova věta.“ O zapomenutém hesle přece celou dobu píšeme. Chamurappi: „Čímž se útočník hledající pojem ‚heslo‘ také dozví, kde je jeho oběť registrována, tam klikne na ‚zapomněl jsem heslo‘, dostane do mailu hash token a má hotovo.“ Ale nedoví se původní uživatelovo heslo, které (průměrný uživatel) má na spoustě serverů stejné. edit: Jde totiž o to, že to provizorní heslo vůbec není potřeba. |
||
Joker Profil |
#11 · Zasláno: 13. 7. 2010, 11:41:53 · Upravil/a: Joker
jenikkozak:
„Uživateli po zapomenutí jeho hesla nebudu posílat hash v url, ale token, ano tak se tomu říká“ Pořád to není nic jiného, než že uživateli pošlu mailem přihlašovací „Ale nedoví se původní uživatelovo heslo, které (průměrný uživatel) má na spoustě serverů stejné.“ To se nedozví tak jako tak. Nebo jak se z mailu typu: Server example.com, změna hesla. Na základě Vašeho požadavku na vytvoření nového hesla na serveru example.com bylo Vaše heslo bylo nastaveno na: d3fh-1aKm Doporučujeme po přihlášení si heslo změnit. zjistí jaké heslo uživatel měl předtím? edit: „Jde totiž o to, že to provizorní heslo vůbec není potřeba.“ Je potřeba úplně stejně. Jestli se tomu říká heslo, hash nebo token nehraje roli, je to úplně ta samá věc. |
||
Bubák Profil |
#12 · Zasláno: 13. 7. 2010, 11:46:44
jenikkozak:
„neboť do schránky se mu může někdo dostat“ Pravděpodobnější je odposlech HTTP komunikace v místní síti. Taky záleží na tom, nakolik je heslo cenné, jedna věc je heslo třebas k chatu, diskusi, neco zcela jiného je heslo třebas k internetovému bankovnictví, to mailem asi nechodí. |
||
jenikkozak Profil |
#13 · Zasláno: 13. 7. 2010, 11:51:22
Joker:
Při tomto postupu: Nevím své heslo, kliknu na odkaz na přihlašovací stránce, vygeneruje se mi nějaké provizorní heslo, jeho hash se uloží do speciální tabulky (není možné přepsat to původní, můj e-mail není ověřen), pošle se mi na e-mail provizorní heslo, to zkopíruji, přihlásím se na dané stránce a heslo změním. Můj postup je takový, že na e-mail rovnou pošlu odkaz s tokenem, kde přímo heslo změní. Nepotřebuji ukládat žádná provizorní hesla. Žádné heslo (ani po registraci, ani po změně) neposílám uživateli na email, tudíž se v jeho e-mailové schránce nedá žádné heslo najít (pochopte, to jediné heslo, kterým se uživatel přihlašuje na různé servery). |
||
panther Profil |
#14 · Zasláno: 13. 7. 2010, 11:54:08
jenikkozak:
„pochopte, to jediné heslo, kterým se uživatel přihlašuje na různé servery“ tady se nepíše nic o posílání hesla, které by mohlo být i jinde - je to jen to náhodně generované. Ono, pokud se mi někdo dostane na e-maiový účet, ať se nové heslo tvoří a předává jakkoliv, útočník jej může změnit (aniž by to současné znal). |
||
jenikkozak Profil |
#15 · Zasláno: 13. 7. 2010, 11:57:32
panther:
„tady se nepíše nic o posílání hesla, které by mohlo být i jinde“ V tomto případě ne. Uvedl jsem však, že na e-mail by se nemělo posílat žádné heslo, tedy ani heslo po registraci na server. |
||
panther Profil |
#16 · Zasláno: 13. 7. 2010, 11:58:09 · Upravil/a: panther
jenikkozak:
„Uvedl jsem však, že na e-mail by se nemělo posílat žádné heslo, tedy ani heslo po registraci na server.“ ale o tom tu, než jsi sem napsal, nepadla ani zmínka. Špatně jsi se vyjádřil, asi bych to dál nepitval, myslím, že všichni víme, co kdo myslel :-) |
||
Joker Profil |
#17 · Zasláno: 13. 7. 2010, 12:03:59
Bubák:
„neco zcela jiného je heslo třebas k internetovému bankovnictví, to mailem asi nechodí.“ Tam je to ten samý postup, jen jiné komunikační kanály. Zavolám do banky, že jsem zapomněl heslo, banka vytvoří nové heslo a pošle mi ho poštou. jenikkozak: „Nevím své heslo, kliknu na odkaz na přihlašovací stránce, vygeneruje se mi nějaké provizorní heslo, jeho hash se uloží do speciální tabulky“ Ne. Nevím heslo, kliknu na „Zapomněl jsem heslo“, systém změní heslo a pošle to nové na e-mail daného uživatele. Případně je mezitím ještě nějaké další ověřování (třeba zadat stejnou e-mailovou adresu, jaká byla použitá pro registraci), aby někdo nemohl otravovat jiné uživatele tím, že jim bude měnit hesla. „Můj postup je takový, že na e-mail rovnou pošlu odkaz s tokenem, kde přímo heslo změní. Nepotřebuji ukládat žádná provizorní hesla.“ Jak se pozná, že to je skutečně ten správný token, tj. ten samý jako se poslal uživatelovi? |
||
jenikkozak Profil |
#18 · Zasláno: 13. 7. 2010, 12:08:47 · Upravil/a: jenikkozak
Joker:
„Jak se pozná, že to je skutečně ten správný token, tj. ten samý jako se poslal uživatelovi?“ To je pravda. Uznávám to. Neuvědomil jsem si, že uložení tokenu je totéž jako uložení provizorního hesla. edit: Omlouvám se všem diskutujícím za způsobené zmatky. Jen jsem chtěl upozornit na to, že registrace mohou obsahovat osobní údaje, průměrný uživatel používá stejné heslo skoro všude, kde mu to dovolí, poslání hesla (po registraci, po změně) umožňuje přístup k těmto údajům. Což ale s původním obsahem vlákna nesouvisí, takže se znovu omlouvám za OT. |
||
Bubák Profil |
#19 · Zasláno: 13. 7. 2010, 12:18:15 · Upravil/a: Bubák
jenikkozak:
„Můj postup je takový, že na e-mail rovnou pošlu odkaz s tokenem, kde přímo heslo změní.“ Když budu mít laškovnou náladu, vlezu na stránku, vyplním cizí přihlašovací jméno a kliknu na "Nové heslo". Dotyčné osobě se změní heslo a má smůlu, dokud si nevyzvedne mail. Co kdyby nějaký útočník napsal skript, který by v pravidelných intervalech "klikal" na žádost o nové heslo? Postup, kdy musím v mail kliknout na odkaz k zneplatnění starého hesla se mi jeví jako výhodnější. Koukám, že Joker mě předběhl, takže jsem psal o tomtéž. |
||
jenikkozak Profil |
#20 · Zasláno: 13. 7. 2010, 12:30:08
Bubák:
„Když budu mít laškovnou náladu, vlezu na stránku, vyplním cizí přihlašovací jméno a kliknu na "Nové heslo". Dotyčné osobě se změní heslo a má smůlu, dokud si nevyzvedne mail. Co kdyby nějaký útočník napsal skript, který by v pravidelných intervalech "klikal" na žádost o nové heslo?“ Nové heslo by uživatel zadal na stránce, na níž by vedla adresa s tokenem, takže útočníkovi (dá-li se mu takto říct) jeho laškovná nálada nepomůže. Můj postup pouze neposílá uživateli provizorní heslo, které by pak musel měnit. Jak ale správně upozornil Joker, je úplně jedno, jestli ukládám hash nebo token. Je vidět, že není moderátorem pro nic za nic. ;-) |
||
Joker Profil |
#21 · Zasláno: 13. 7. 2010, 12:36:42
jenikkozak:
„Omlouvám se všem diskutujícím za způsobené zmatky.“ Ono to není tak od věci, v souvislosti s přidáním položky do FAQ by nebylo od věci tam popsat běžný postup zasílání nového hesla. „průměrný uživatel používá stejné heslo skoro všude, kde mu to dovolí, poslání hesla (po registraci, po změně) umožňuje přístup k těmto údajům.“ Jasně, nicméně posílá se náhodně vygenerované heslo, to původní se ani poslat nemůže, protože server ho nezná- právě díky neexistenci zpětného převedení hashe na původní vstup. Bubák: „Když budu mít laškovnou náladu, vlezu na stránku, vyplním cizí přihlašovací jméno a kliknu na "Nové heslo"“ To jsem zmínil ve svém příspěvku, podle mě tohle riziko je obecně. Řešením by bylo nějaké dodatečné ověření (např. zadání e-mailové adresy registrované pro daného uživatele) a případně omezení množství žádostí (dvě za den, další nejdřív 24 hodin po předchozí a podobně) |
||
jenikkozak Profil |
#22 · Zasláno: 13. 7. 2010, 12:44:14
Joker:
„Řešením by bylo nějaké dodatečné ověření (např. zadání e-mailové adresy registrované pro daného uživatele) a případně omezení množství žádostí (dvě za den, další nejdřív 24 hodin po předchozí a podobně)“ Jen detail: Zasláním tokenu na e-mail ověřím, že uživatel, který požádal o změnu hesla, skutečně má přístup do dané e-mailové schránky, není proto nutné omezovat množství žádostí a je to bezpečnější než zjistit, zda tento uživatel zná pouze adresu e-mailové schránky. |
||
jenikkozak Profil |
#23 · Zasláno: 13. 7. 2010, 16:55:16
Navazuji na téma md5 decrypt, které nechci dále zaplevelovat.
Jokerova připomínka mě přivedla na myšlenku, jak nejsnáze zprovoznit obnovení zapomenutého hesla tak, abych nemusel tvořit hesla provizorní a ukládat je do samostatné tabulky do databáze, nebo riskovat zneužití funkce obnovení. Joker navrhoval toto schéma: „Nevím heslo, kliknu na „Zapomněl jsem heslo“, systém změní heslo a pošle to nové na e-mail daného uživatele. Případně je mezitím ještě nějaké další ověřování (třeba zadat stejnou e-mailovou adresu, jaká byla použitá pro registraci, a případně omezení množství žádostí - dvě za den, další nejdřív 24 hodin po předchozí a podobně), aby někdo nemohl otravovat jiné uživatele tím, že jim bude měnit hesla. “ (Spojil jsem dva jeho příspěvky do jednoho.) To mi nepřijde jako šťastné řešení. Stačí znát pouze tvou e-mailovou adresu (nepotřebuji její heslo) a hurá, jsem na tvém účtu. Omezení, že tuto funkci mohu použít jednou za den, mi je ukradené. Za prvé mne nemůžeš identifikovat (díky proxy), za druhé mi stačí jeden jediný pokus za rok, abych se dostal na tvůj účet. Jinou možností je po zapomenutí hesla se dotázat na e-mail či nick, vytvořit provizorní heslo, to poslat uživateli na uvedený e-mail (totožný s tím, který uvedl při registraci). Uživatel z e-mailu heslo provizorní heslo zkopíruje, přihlásí se jím a změní si jej. Nevýhodou tohoto postupu je to, že musím ve speciální tabulce v databázi uchovávat informaci o vygenerovaných provizorních heslech. Napadlo mne jiné schéma: Uživatel nezná heslo, dotážu se jej na e-mail či nick, vytvořím token podobnou funkcí: md5(nick+datum+tajna_ingredience), tento token přidám do odkazu na změnu hesla, který pošlu uživateli na e-mail. Uživatel klikne na odkaz v e-mailu, z databáze vezmu jeho nick, přidám k němu aktuální datum a onu ingredienci a z toho vytvořím hash. Bude-li totožný jako token z adresy, povolím uživateli změnu hesla. Nebudu testovat jen aktuální datum, ale i to z předchozího dne. (Požádá-li uživatel o změnu před půlnocí, aby měl 24 hodin na to, aby na odkaz v e-mailu klikl.) Výhody tohoto řešení jsou ty, že ověřím, že uživatel skutečně vlastní e-mailovou adresu, kterou uvedl při registraci, dále zajistím, že požadavek na změnu hesla není zastaralý. A navíc nebudu muset udržovat v databázi údaj o tom, kdo kdy žádal o změnu hesla, proxy nikomu nepomůže. Pokud za tajnou_ingredienci přidám například datum posledního přihlášení uživatele, zajistím tak, že pokud se uživatel mezi požadavkem na změnu hesla a kliknutím na odkaz v e-mailu přihlásí, token přestane být platný. (Uživatel jej již nepotřebuje, pouze představuje nepatrnou díru do účtu.) Chci se zeptat, zda jsem si nevšiml nějaké bezpečnostní chyby, kterou by toto mé poměrně hodně jednoduché řešení mohlo obsahovat. |
||
Pan X Profil |
#24 · Zasláno: 13. 7. 2010, 17:27:31
jenikkozak:
> Jinou možností je po zapomenutí hesla se dotázat na e-mail či nick, vytvořit provizorní heslo, to poslat uživateli na uvedený e-mail (totožný s tím, který uvedl při registraci). Uživatel z e-mailu heslo provizorní heslo zkopíruje, přihlásí se jím a změní si jej. > Nevýhodou tohoto postupu je to, že musím ve speciální tabulce v databázi uchovávat informaci o vygenerovaných provizorních heslech. Proč by se mělo někde neco uchovávat v další tabulce? Prostě se v DB přepíše staré heslo na nově vygenerované a nikde se nemusí nic uchovávat „Stačí znát pouze tvou e-mailovou adresu (nepotřebuji její heslo) a hurá, jsem na tvém účtu.“ - pokud heslo přidjde na email uživatele a né na email, který by tam někam vyplnil heslo bychom od emailu stejně potřebovali. |
||
ninja Profil |
#25 · Zasláno: 13. 7. 2010, 18:26:12
Pan X:
„Proč by se mělo někde neco uchovávat v další tabulce? Prostě se v DB přepíše staré heslo na nově vygenerované a nikde se nemusí nic uchovávat“ Protože pokud znám email/login nějakého uživatele, mohl bych mu neustále generovat zákeřně nová hesla, že už by se nikdy nepřihlásil. |
||
Pan X Profil |
#26 · Zasláno: 13. 7. 2010, 21:02:07
ninja:
To jsem opoměl, dík za připomínku. V tom případě tam někam strčit datum, nebo mít kolonku po 2 hesla jedno orig. to by zůstalo a pak jedno enerované . Uživatel by se mohl přihláit pokud by ho nezapoměl i přesto že mu to nějaký vtipálek mění -> ale top je trochu praštěné :D |
||
Časová prodleva: 14 let
|
0