PHP Sessions veilig?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Danny von Gaal

Danny von Gaal

01/09/2011 15:42:43
Quote Anchor link
Ik ben bezig een beheerpagina te maken en die beveilig ik dmv php sessions. De username en wachtwoord worden opgeslagen en op elke pagina wordt eerst gecontroleerd of deze nog kloppen en dan wordt de pagina weergegeven.

Maar hoe veilig is dit? Met sessions kan je (volgens mij) toch niet net zoals cookies ingelogd blijven als je de volgende keer terug komt?

Kunnen andere mensen langs deze methode?
 
PHP hulp

PHP hulp

25/11/2024 06:07:49
 
Vincent Huisman

Vincent Huisman

01/09/2011 15:44:49
Quote Anchor link
je kan beter nooit wachtwoorden opslaan in sessies
 
PH Piet

PH Piet

01/09/2011 15:47:09
Quote Anchor link
Zoek eens achter Session hijacking
 

01/09/2011 15:47:56
Quote Anchor link
Danny Emmerik op 01/09/2011 15:42:43:
Ik ben bezig een beheerpagina te maken en die beveilig ik dmv php sessions. De username en wachtwoord worden opgeslagen en op elke pagina wordt eerst gecontroleerd of deze nog kloppen en dan wordt de pagina weergegeven.

Maar hoe veilig is dit? Met sessions kan je (volgens mij) toch niet net zoals cookies ingelogd blijven als je de volgende keer terug komt?

Kunnen andere mensen langs deze methode?


Je kunt beter geen wachtwoorden opslaan, niet in session en al helemaal niet in cookies. Je zou bijvoorbeeld een random sha1 hash kunnen opslaan in je database, die in sessions/cookies zetten en vergelijken.
 
Danny von Gaal

Danny von Gaal

01/09/2011 16:01:31
Quote Anchor link
Oké bedankt. Ik zal eens kijken hoe ik iedere keer een andere hash kan gebruiken.
Deze moet neem ik aan ook opgeslagen worden in mijn DB?

Slim om te weten en eigenlijk dom van mij om wachtwoorden in sessies te gebruiken. Maar ik dacht als de username en ww het zelfde zijn weet ik dat ik de goede persoon heb.
 

01/09/2011 16:54:13
Quote Anchor link
Danny Emmerik op 01/09/2011 16:01:31:
Oké bedankt. Ik zal eens kijken hoe ik iedere keer een andere hash kan gebruiken.
Deze moet neem ik aan ook opgeslagen worden in mijn DB?

Slim om te weten en eigenlijk dom van mij om wachtwoorden in sessies te gebruiken. Maar ik dacht als de username en ww het zelfde zijn weet ik dat ik de goede persoon heb.


Ik sla altijd 2 sessies op namelijk:
- User id
- Hash

User_id is het nummer van de gebruiker in de database heb je dan een veld genaamd: user_id ingesteld op: Auto_increment en Primary_key.
De hash zet je bij het inloggen in de database en in een sessie.

Bij de pagina's hoef je dus alleen nog maar te controleren of er een gebruiker bestaat met het user_id en of de hash klopt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
//hash genereren
$rand = sha1( rand( 0, 999 ) );

$query = mysql_query( "SELECT username FROM users WHERE user_id='". mysql_real_escape_string( $_SESSION['user_id'] ) ."' AND hash='". mysql_real_escape_string( $_SESSION['hash'] ) ."'" );
?>


Snap je ;)?
 
Jacco Brandt

Jacco Brandt

01/09/2011 17:12:57
Quote Anchor link
alleen pak dan deze hash:
sha1(microtime(true)), deze is iets unieker.
 
Php knipper

php knipper

01/09/2011 18:41:51
Quote Anchor link
meschien kan je een bevijlegingscode meegeven en die word ook gecontroleert ( bij iedere gebruiker is die ander's )

normaal gezien kan je dan niet snel hacken want dan moet je ook nog die code kennen voordat het mogelijk is
 
Danny von Gaal

Danny von Gaal

01/09/2011 22:24:17
Quote Anchor link
Bedankt allen ik zal dr eens naar kijken.
Dan moet ik dus ook bij iedere inlog het db veld "hash" updaten.
 
Kees Schepers

kees Schepers

01/09/2011 23:34:34
Quote Anchor link
Om applicaties beter te beveiligen en session hijacking tegen te gaan kun je het beste de session om een bepaalde interval laten vernieuwen. Er is hier een PHP functie voor die dan een nieuwe sessionid maakt en de data overzet zodat je niets kwijt bent maar ben even de naam kwijt..

Wat je tegenwoordig ook steeds vaker ziet is dat je in een applicatie bij het uitvoeren van belangrijke acties je opnieuw je wachtwoord moet invoeren.
 
Marco M

Marco M

01/09/2011 23:59:10
Quote Anchor link
session_regenerate_id ?
 
Ozzie PHP

Ozzie PHP

01/09/2011 23:59:39
Quote Anchor link
Kees Schepers op 01/09/2011 23:34:34:
Er is hier een PHP functie voor die dan een nieuwe sessionid maakt en de data overzet zodat je niets kwijt bent maar ben even de naam kwijt..

Ik denk dat je deze bedoelt:

http://php.net/manual/en/function.session-regenerate-id.php
 
Kees Schepers

kees Schepers

02/09/2011 08:36:53
Quote Anchor link
Klopt! tnx :)
 
Danny von Gaal

Danny von Gaal

05/09/2011 21:13:39
Quote Anchor link
Beste mensen ik heb naar jullie geluisterd en ja het duurde ff maar ik heb het toegepast en hoop hier graag opbouwende feedback op te kunnen krijgen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if(isset($_POST['submit'])){
                    $gebruikersnaam = $_POST['gebruikersnaam'];
                    $wachtwoord = $_POST['wachtwoord'];
                        if($_POST['gebruikersnaam'] && $_POST['wachtwoord']){
                            if($_POST['gebruikersnaam'] == '***' && $_POST['wachtwoord'] == '***'){
                                $hash = sha1(microtime(true));
                                mysql_query("UPDATE beheer SET hash = '$hash' WHERE gebruikersnaam = '***' AND wachtwoord = '***'") or die (mysql_error());
                                $sql = "SELECT id,hash FROM beheer WHERE gebruikersnaam = '***' AND wachtwoord = '***'";
                                  $query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
                                    while($beheer = mysql_fetch_object($query)) {
                                        $id = $beheer->id;
                                        $hash2 = $beheer->hash;
                                    }

                                $_SESSION['id'] = $id;
                                $_SESSION['hash'] = $hash2;
                                echo "Je bent succesvol ingelogd. Je id is $id en je hash is $hash.<br><a href='index.php?pagina=beheer_veilig'>Ga nu verder</a> ..";
                            }

?>
 
Roel -

Roel -

05/09/2011 21:16:00
Quote Anchor link
En je hash is...?!
Waarom zet je dat erin?
 
Danny von Gaal

Danny von Gaal

05/09/2011 21:21:44
Quote Anchor link
Wat bedoel je?
Me hash wordt hier bepaald:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $hash = sha1(microtime(true)); ?>
 

05/09/2011 21:24:42
Quote Anchor link
Roel van de Water op 05/09/2011 21:16:00:
En je hash is...?!
Waarom zet je dat erin?


Hash is een gehasht random getal dat word gebruikt als valideren, je moet het zien als soort van "wachtwoord" alleen kun je wachtwoord niet opslaan in een sessie/cookie maar ipv daarvan is een "hash" dus bedacht.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.