[html] Password hashen (unobtrusive) zonder SSL

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024
Ik heb dus een password input welke momenteel via JS client-side gehashed wordt zodat het niet als plain-text de lijn over gestuurd wordt. Nu hoor ik van iedereen, vooral in ajax topics dat unobtrusiveness een must is. Zou ik voor mensen zonder JS gewoon plain-text moeten verzenden? Niet echt veilig vind ik. Zijn er dan nog andere opties buiten SSL? Of gooi je in dit geval gewoon dat unob. overboord en verplicht je mensen tot het aanhebben staan van JS? Hoe fixen jullie dat en hebben jullie het uberhaubt wel gefixed? ;) Ik kom na wat onderzoek bar veel websites tegen die zonder ssl gewoon plain-text versturen. Wat denken jullie?

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Waarschuwing in de HTML voor bezoekers zonder JS, wel toestaan om plaintext te versturen.

Hangt ook af van het type website natuurlijk; of er gevoelige/financiële data van gebruikers wordt opgeslagen.

[ Voor 16% gewijzigd door Blaise op 19-11-2008 19:46 ]


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
met php doen en in een database opslaan als sha1

zie ook:
http://nl3.php.net/sha1

op die manier lijkt me toch wat veiliger, en gebruiksvriendenlijker ook voor de bezoekers zonder javascript enabled :)

[ Voor 8% gewijzigd door Zakkenwasser op 19-11-2008 22:10 ]

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

iH8 schreef op woensdag 19 november 2008 @ 19:25:
Ik heb dus een password input welke momenteel via JS client-side gehashed wordt zodat het niet als plain-text de lijn over gestuurd wordt.
Houd je er wel rekening mee dat je dus die javascript en andere zooi ook over de lijn gooit? Dus als je dat hebt + het gehasdepassword dan is het vast wel mogelijk om dat password weer te krijgen.
En weet je het zeker dat je het hashed en niet encrypt?
MrJey schreef op woensdag 19 november 2008 @ 21:43:
met php doen en in een database opslaan als md5
(...)
op die manier lijkt me toch wat veiliger, en gebruiksvriendenlijker ook voor de bezoekers zonder javascript enabled :)
Dan stuur je het dus als plain-text over de lijn. Ik denk dat de TS'er geëncrypted bedoelt, zoals RSA. Als hij er bij de client al bijvoorbeeld een md5 hash van maakt dan is dat in princiepe gewoon hetzelfde als een password.

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
ibmos2warp schreef op woensdag 19 november 2008 @ 21:57:

Dan stuur je het dus als plain-text over de lijn. Ik denk dat de TS'er geëncrypted bedoelt, zoals RSA. Als hij er bij de client al bijvoorbeeld een md5 hash van maakt dan is dat in princiepe gewoon hetzelfde als een password.
[code=php]
$username = trim(mysql_prep($_POST['username']));
$password = trim(mysql_prep($_POST['password']));
$hashed_password = sha1($password);

if ( empty($errors) ) {
$query = "INSERT INTO users (
username, hashed_password
) VALUES (
'{$username}', '{$hashed_password}'
)";
$result = mysql_query($query, $connection);
if ($result) {
$message = "The user was successfully created.";
} else {
$message = "The user could not be created.";
$message .= "<br />" . mysql_error();
}

[/code=php]
Neen, meer zoiets.

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

Verwijderd

Zeg sherlock, hoe krijg je het wachtwoord op de server zonder het plaintext in een HTTP request mee te sturen?

Acties:
  • 0 Henk 'm!

  • Zakkenwasser
  • Registratie: Februari 2001
  • Niet online
Verwijderd schreef op woensdag 19 november 2008 @ 22:10:
[...]

Zeg sherlock, hoe krijg je het wachtwoord op de server zonder het plaintext in een HTTP request mee te sturen?
uhm, met een loop? O-)

PSP 1000 @ 6.60 Pro C2 [+256GB]
PSVita @ Henkaku Enso [+256GB]
3DS @ Luma (B9S) [+160GB]
Nintendo Switch 3.0.1 [+256GB]


Acties:
  • 0 Henk 'm!

  • Zeebonk
  • Registratie: Augustus 2005
  • Laatst online: 30-07 20:50
@MrJey: Cheetah bedoeld dat een form post aankomt op de server, het gaat hier over die verbinding, waarin je form data plain text wordt verstuurd. Wat jij doet is na het ontvangen op de php server een hash er overheen gooien.

edit:
Zelf wel erg benieuwd wat hier WEL een goede oplossing voor zou zijn... Wel wat over ssl gelezen, maar is dat de eenige oplossing?

[ Voor 23% gewijzigd door Zeebonk op 19-11-2008 22:16 ]


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 26-09 21:33
Verwijderd schreef op woensdag 19 november 2008 @ 22:10:
[...]

Zeg sherlock, hoe krijg je het wachtwoord op de server zonder het plaintext in een HTTP request mee te sturen?
Lijkt me dus inderdaad dat je alleen SSL en Javascript als opties overhoudt. MD5 implementaties in Javascript zijn overigens met Google goed te vinden: http://www.google.nl/sear...official&client=firefox-a

Of je plaintext daarnaast ook wilt toestaan hangt nogal af van hoe veilig het moet zijn. Afhankelijk van je opzet, kan een gehackte account door plaintext versturen al een hoop verstieren. En Javascript lijkt me nou ook weer niet zo'n hoge drempel.

Acties:
  • 0 Henk 'm!

Verwijderd

Morrar schreef op woensdag 19 november 2008 @ 22:18:

Lijkt me dus inderdaad dat je alleen SSL en Javascript als opties overhoudt.
En HTTP Digest authentication, maar dat kan alleen werken zoals je wilt, als het wachtwoord al op de server bekend is.
MD5 implementaties in Javascript zijn overigens met Google goed te vinden: http://www.google.nl/sear...official&client=firefox-a

Of je plaintext daarnaast ook wilt toestaan hangt nogal af van hoe veilig het moet zijn. Afhankelijk van je opzet, kan een gehackte account door plaintext versturen al een hoop verstieren. En Javascript lijkt me nou ook weer niet zo'n hoge drempel.
Precies, het ligt aan het exacte doel. Optioneel wil je de gebruiker de mogelijkheid bieden gewoon plaintext te authenticeren. Als het heel belangrijk is dat dit niet kan, is een budget voor een SSL certificaat vaak ook niet zo'n probleem. En anders kun je altijd een self-signed certificaat gebruiken. Again: dit is afhankelijk van doel en doelgroep.

Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024
ik maak via js clientside een hash van een door de server genereerde random string en het wachtwoord en die verstuur ik. bij ontvangen maakt de server diezelfde hash van het opgeslagen wachtwoord en de random string. dan vergelijk ik de clienthash met de serverhash. challenge / response. ik moet dus al hashen kunnen op clientside maar HTML heeft daar geen functionaliteit voor zover ik weet dus ik kom automatisch bij JS terecht.

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
iH8 schreef op woensdag 19 november 2008 @ 22:35:
bij ontvangen maakt de server diezelfde hash van het opgeslagen wachtwoord en de random string
Dus je slaat het wachtwoord plain text op in je DB (of ergens anders)? In dat geval zou ik daar eerst eens aandacht aan besteden i.p.v. het wiel vierkant uit te vinden.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024
ok ok, ik had het uitleg technisch maar wat simpel gehouden. ik maak een sha van het password, dan een sha van die sha + string. die verstuur ik. die vergelijk ik met een sha van het wachtwoord (staat gesha'ed in de DB) + string.

Aunt bunny is coming to get me!


  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik gebruik soms de methode:

Inloggen naar client: salt en een random string
clientside: hash(hash(salt+wachtwoord)+random string)
serverside: hash(wachtwoord uit db+random string)

Het wachtwoord in de db is dus ook gesalt.

Registreren naar client: salt
clientside: hash(salt+wachtwoord)
server: opslaan in db

Zo gaat nooit je wachtwoord plain over de lijn, ook niet tijdens registratie. En bij het inloggen heb je altijd een wisselende hash die maar 1 keer geldig is. Uiteraard detecteer je of iemand wel javascript aan heeft en zoniet, dan werkt het zonder clientside hashing ook.
Pagina: 1