Wachtwoord onthouden
Pagina: « vorige 1 2 3 volgende »
Karl Karl op 17/02/2011 12:40:14:
Wie zijn bij jou mensen? Dus naar wie verwijs jij?
Ik heb het ook over cookies, maar mijn punt is dat je er geen wachtwoord in moet opslaan.
Pim - op 17/02/2011 12:22:04:
Maar ik snap niet waarom mensen cookies als 'onveilig' en daarom 'onbruikbaar' beschouwen...
Wie zijn bij jou mensen? Dus naar wie verwijs jij?
Ik heb het ook over cookies, maar mijn punt is dat je er geen wachtwoord in moet opslaan.
Hohoho, voel je je aangevallen?
Het valt me op dat ik vaak zie dat mensen, leden van dit forum, menen dat cookies niet gebruikt moeten worden. Uiteraard gaat het (bij lange na) niet om iedereen hier, maar dat lijkt me vanzelfsprekend...
Pim - op 17/02/2011 14:38:24:
Hohoho, voel je je aangevallen?
Het valt me op dat ik vaak zie dat mensen, leden van dit forum, menen dat cookies niet gebruikt moeten worden. Uiteraard gaat het (bij lange na) niet om iedereen hier, maar dat lijkt me vanzelfsprekend...
Karl Karl op 17/02/2011 12:40:14:
Wie zijn bij jou mensen? Dus naar wie verwijs jij?
Ik heb het ook over cookies, maar mijn punt is dat je er geen wachtwoord in moet opslaan.
Pim - op 17/02/2011 12:22:04:
Maar ik snap niet waarom mensen cookies als 'onveilig' en daarom 'onbruikbaar' beschouwen...
Wie zijn bij jou mensen? Dus naar wie verwijs jij?
Ik heb het ook over cookies, maar mijn punt is dat je er geen wachtwoord in moet opslaan.
Hohoho, voel je je aangevallen?
Het valt me op dat ik vaak zie dat mensen, leden van dit forum, menen dat cookies niet gebruikt moeten worden. Uiteraard gaat het (bij lange na) niet om iedereen hier, maar dat lijkt me vanzelfsprekend...
Nee, het is alleen een verkapte vorm van nog eens mijn standpunt duidelijk te maken.
Zou iemand kunnen helpen met mijn laatste vraag (zie vorige pagina)?
Dit geheim kan je random maken en dan opslaan in de DB, of je kan een hash van wat gegevens nemen met een salt erbij.
En hoe zit het dan met het ip adres?
Je hoeft dan alleen in de database, bij de hash die je gebruikt in de cookie, het ipadres op te slaan. Met een simpele $_SERVER['REMOTE_ADDR'] kan je controleren of de ipadressen overeenkomen. Zo niet, dan reset je alles uit veiligheidsoverwegingen (dus cookies (evt. sessies) verwijderen en hash uit de database verwijderen).
Dit is een methode om de kans van het stelen van cookies te verkleinen.
Om te zorgen dat je op meerdere locaties kan inloggen is het wellicht handig om een aparte tabel te maken in de database, waarin je de verschillende sessies / cookie gegevens opslaat (inclusief ipadres) en koppelt aan de user tabel. Zodoende kunnen mensen op verschillende locaties inloggen en kan je (net als op tweakers) de gebruiker zelf laten bepalen op welke locaties hij / zij uitgelogd wil worden / ingelogd wil zijn (sessiebeheer). In bepaalde situaties kan dit wel onveilig zijn (zoals op openbare computers, etc.). Echter kan je de gebruiker een keuze voorschotelen of de login onthouden moet worden of dat het alleen om een eenmalige sessie gaat.
Er zijn veel mogelijkheden, alleen is het belangrijk een goede afweging te maken tussen de verschillende veiligheidsricico's die de verschillende methoden met zich meebrengen.
Gewijzigd op 17/02/2011 20:16:05 door Arjan -
Moet ik dan in de database het ip én de hash opslaan en dan alleen controleren of deze overeenkomen met de hash in de cookie en het ip adres van de gebruiker? Of moet ik de hash niet in de database opslaan en die telkens opnieuw genereren?
Kijk nou eens in de reactie boven jou :s. Daar staat het antwoord toch duidelijk in.
Ok, en is een verdere controle dan nog nodig, of kan ik aannemen dat niemand het kan hacken en kan ik hem meteen naar de beveiligde pagina doorsturen?
Als de hash (bijv. in combinatie met de id van de user) in de cookie overeenkomt met de gegevens in de database en het ipadres overeenkomt met het ipadres waarop de cookie is aangemaakt dan is het al redelijk veilig om diegene gelijk in te loggen. Echter is de manier waarop je deze controles uitvoert en iemand laat inloggen ook van invloed op de veiligheid van je systeem.
Nu moet ik dus twee database connecties hebben.
- Die van het onderdeel waar de speler wil inloggen (voor controle van wachtwoord etc).
- Die van de homepage voor het invullen van het ipadres en de hash enzo, en voor overige zaken als nieuws.
Hoe kan ik meerdere database connecties maken? Het schijnt dat dat niet kan, maar dat is toch apart?
Moet ik in de database ook het user_id opslaan zodat ik daarvan de naam kan ophalen? Of moet ik in een cookie de naam opslaan?
Pim heeft in zijn voorbeeld een script gemaakt waarbij een cookie aangemaakt wordt met [user_id]-[hash]. Waarvoor is dit user_id?
Gewijzigd op 19/02/2011 12:09:22 door Jordy nvt
Zou iemand het laatste probleem nog kunnen oplossen?
Nu moet ik dus twee database connecties hebben.
- Die van het onderdeel waar de speler wil inloggen (voor controle van wachtwoord etc).
- Die van de homepage voor het invullen van het ipadres en de hash enzo, en voor overige zaken als nieuws.
Hoe kan ik meerdere database connecties maken? Het schijnt dat dat niet kan, maar dat is toch apart?
Ik zal me dan ook maar herhalen.
Met PDO
Een voorbeeld
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$db1 = new PDO('mysql:host=localhost;dbname=phphulp','mijn_usernaam','paswoord1');
$db2 = new PDO('mysql:host=localhost;dbname=andere_database','mijn_usernaam2','paswoord2');
$sql1 = "SELECT * FROM shoutbox LIMIT 5";
$sql2 = "SELECT * FROM ipadressen LIMIT 6";
$res1 = $db1->query($sql1);
$res2 = $db2->query($sql2);
echo 'DB 1: ';
foreach($res1 as $row)
{
echo '<pre>'. print_r($row, 1) .'</pre>';
}
echo '<br/><br/><br/>DB 2: ';
foreach($res2 as $row)
{
echo '<pre>'. print_r($row, 1) .'</pre>';
}
?>
$db1 = new PDO('mysql:host=localhost;dbname=phphulp','mijn_usernaam','paswoord1');
$db2 = new PDO('mysql:host=localhost;dbname=andere_database','mijn_usernaam2','paswoord2');
$sql1 = "SELECT * FROM shoutbox LIMIT 5";
$sql2 = "SELECT * FROM ipadressen LIMIT 6";
$res1 = $db1->query($sql1);
$res2 = $db2->query($sql2);
echo 'DB 1: ';
foreach($res1 as $row)
{
echo '<pre>'. print_r($row, 1) .'</pre>';
}
echo '<br/><br/><br/>DB 2: ';
foreach($res2 as $row)
{
echo '<pre>'. print_r($row, 1) .'</pre>';
}
?>
Hoezo twee verschillende databases?
En hoe kan ik dan op de hoofdpagina aangeven of de gebruiker is ingelogd (bv: welkom Jordy)?
Moet ik in de database ook het user_id opslaan zodat ik daarvan de naam kan ophalen? Of moet ik in een cookie de naam opslaan?
Pim heeft in zijn voorbeeld een script gemaakt waarbij een cookie aangemaakt wordt met [user_id]-[hash]. Waarvoor is dit user_id?
Inderdaad, hoezo twee verschillende databases?
Hoe wil je het dan anders doen? Waar moet ik dan de records opslaan dat een gebruiker standaard is ingelogd?