login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Goede beveiliging

Offline Raze - 08/09/2009 23:29 (laatste wijziging 08/09/2009 23:30)
Avatar van RazePHP beginner Hallo,

ik heb een beveiligingsscript geschreven voor mijn website. Ik heb wel enkele vragen. (Aangezien de code wel werkt, veel te lang is en ook niet relevant aan de vragen, plaats ik ze (voorlopig) niet).

Het is zo dat ik werk met sessies (ik zet geen cookies). Is dit ok? Of moeten er altijd cookies gebruikt worden? Ik heb nu 4 sessies:
$_SESSION['userID']: deze "encrypt" ik met base64_(de/en)code en met een wiskunde berekening (die in 2 richtingen bruikbaar is).
$_SESSION['ip_address']: deze is het ip-adress
$_SESSION['timeout']: een mktime()+300 seconden. Indien er dus langer dan 5 minuten niets gebeurt wordt de gebruiker (bij de eerste volgende pagina herlading natuurlijk) uitgelogd.
$_SESSION['rand_key'] = een random key die op elke pagina gewijzigd wordt. Ook worden deze 4 gegevens opgeslagen in een database, waarbij user_id de primary key is.

Daarnaast heb ik geprobeerd het te beveiligen tegen session hijacking door een ander save_path voor de sessies te gebruiken, te kijken of $_SESSION['ip_address'] bestaat, en zo ja, kijken of $_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR'].
Ik heb het grootste gedeelte al getest door bv. op aparte pagina's de sessie 'rand_key' te wijzigen behalve in de database, of door de sessie 'ip_address' te wijzigen etc. Dit werkt dan allemaal naar behoren.

Inloggen gebeurt via een SSL-verbinding en aan de input worden (indien nodig) slashes toegevoegd via mysqli_real_escape_string.

Nu vroeg ik mij af: is dit genoeg (of ben ik iets vergeten), en vooral, is dit goed??

Ik zou graag willen weten hoe jullie een goede totaalbeveiliging zien, en of er hier eventueel verbeteringen aan kunnen worden toegevoegd.

9 antwoorden

Gesponsorde links
Offline drie_elf - 09/09/2009 00:09 (laatste wijziging 10/09/2009 17:39)
Avatar van drie_elf Nieuw lid Vergeet de man-in-the-middle niet
http://www.phphulp.nl/php/tutorials/10/452/1026/

Totaal beveiliging is voor mij simpel bewoord:
Maak gebruik van meerdere technieken, gebruik deze op de juiste manier en script je scripts onvoorspelbaar. (bijvoorbeeld door een ander save_path o.i.d. te gebruiken)

Goed testen zegt je het meest over je beveiliging.

Koen schreef:
Onze URL regex zet je urls automatisch om, de url tags zijn bedoeld om dit soort linkjes te maken url tags rond gewone urls hoeven dus niet!
Offline tictac_php2 - 09/09/2009 00:18
Avatar van tictac_php2 Nieuw lid $_SESSION['timeout']: een mktime()+300 seconden. Indien er dus langer dan 5 minuten niets gebeurt wordt de gebruiker (bij de eerste volgende pagina herlading natuurlijk) uitgelogd.

Doe je een aan niet met een SESSION

- maak een db aan met daarin gegevens:

Online

<id //auto_inc> <user> <key ='random_key 8cijfers en teken'> <tijd>

Voorbeeldje hiervan:

32 16 4G8xjiKl 3500971
33 0 fgyui8Ze 3500958
35 9 5pkqOJ8a 3500893

Elke keer bij het laden van de main:


  1. mysql_query("UPDATE online SET tijd = "'.time();.'" WHERE key = '".mysql_real_escape_string($_COOKIE['die cookie']).'"");
  2.  
  3. $online_verval = time()-300; // 300 seconden = 5 minuten
  4. mysql_query("DELETE FROM online WHERE tijd < '$online_verval'");


Zo doe je dat naar mijn mening toch. (dit zijn stukjes he)

Op deze manier kun je ook makkelijk kijken wie er online is. (je zag een 0 staan bij user, dat betekend dat het een gast is.


//
//
//
//
$_SESSION['ip_address']: deze is het ip-adress

Moet je ook niet in een SESSION STEKEN, bouw verder uit op die cookie.

Sql Table: users

<id = auto_inc> <name> <ip>

16 jezelf 88.88.88.89

Je kan zo simpel opvragen van het IP, NOOIt SESSION

//
//
//
//
$_SESSION['userID']: deze "encrypt" ik met base64_(de/en)code en met een wiskunde berekening (die in 2 richtingen bruikbaar is).

Ook uitbouwen verder uit die cookie


Als extra een functie voor je key
  1. function sleutel($tekens = false)
  2. {
  3. if(!$tekens)
  4. $tekens = 10;
  5.  
  6. $sleutel = "";
  7. $array = array ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "v", "x", "y", "z", 1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
  8.  
  9. for ($i = 0; $i < $tekens; $i++)
  10. $sleutel .= $array[rand(0, 33)];
  11.  
  12. return strtoupper($sleutel);
  13. }



Klinkt vaag maar stuur pm leg ik je alles deftig uit en help ik je wel even op weg.
Offline Raze - 09/09/2009 00:33
Avatar van Raze PHP beginner
tictac_php2 schreef:
$_SESSION['ip_address']: deze is het ip-adress

Moet je ook niet in een SESSION STEKEN, bouw verder uit op die cookie.


Die staat ook nog eens in de database

Ik zet het ip-adres in een sessie om session hijacking (beter) te kunnen voorkomen

http://wiki.phpfreakz.nl/Session_Hijacking
Offline tictac_php2 - 09/09/2009 00:35
Avatar van tictac_php2 Nieuw lid
Raze schreef:
[..quote..]

Die staat ook nog eens in de database

Ik zet het ip-adres in een sessie om session hijacking (beter) te kunnen voorkomen

http://wiki.phpfreakz.nl/Session_Hijacking


SESSION: CLIENTSIDE (aanpasbaar/uitschakelbaar)
DATABASE: SERVERSIDE (hard, geen client change)
Offline Raze - 09/09/2009 21:07
Avatar van Raze PHP beginner Sessions uitschakelbaar?
Offline Sitebase - 10/09/2009 12:39
Avatar van Sitebase PHP expert
tictac_php2 schreef:
SESSION: CLIENTSIDE (aanpasbaar/uitschakelbaar)


Sinds wanneer zijn sessies clientside?
Offline ArieMedia - 10/09/2009 13:05
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
WMP schreef:
[..quote..]

Sinds wanneer zijn sessies clientside?
Sessies zijn serverside,
cookies zijn clientside.

Een sessie word ongezien meegegeven in de header of/en formulier.
Op deze manier probeert php de sessie te houden.
Offline Raze - 10/09/2009 17:06
Avatar van Raze PHP beginner sessies werken ook met cookies dacht ik...
daarom kan je sessies dan ook "hijacken" door een cookie met de sessievariabelen bij je zelf te faken
Offline Koen - 10/09/2009 17:43
Avatar van Koen PHP expert
Arie2Zero schreef:
[..quote..]Sessies zijn serverside,
cookies zijn clientside.

Een sessie word ongezien meegegeven in de header of/en formulier.
Op deze manier probeert php de sessie te houden.


Niet helemaal waar; Bij sessies wordt er een cookie bij de gebruiker opgeslagen die het session id bevat, op die manier wordt de gebruiker gelinkt aan een session bestand op de server.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.207s