login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Veiligheid

Offline roy - 07/02/2005 13:09 (laatste wijziging 07/02/2005 14:14)
Avatar van royPHP gevorderde Ik heb een log-in systeempje.
Maar als je bent ingelogd zie je in de adresbalk je id-nummer, verhoog je dit nummer dan kom je in een ander id. Dit is uiteraard niet de bedoeling!!

Hoe kan je ervoor zorgen dat je in de adresbalk alleen het website adres ziet en verder niks?



Met Vriendelijke Groet,
Roy

16 antwoorden

Gesponsorde links
Offline Fenrir - 07/02/2005 13:11
Avatar van Fenrir PHP expert Gebruik sessions.

Je kunt een v/d twee classes gebruiken in dit topic:
http://www.site...mp;id=3996
Offline roy - 07/02/2005 13:21
Avatar van roy PHP gevorderde OK, maar kan je er niet voor zorgen dat het adres in de adresbalk niet veranderd?
Offline numlockrond - 07/02/2005 13:24
Avatar van numlockrond Onbekend met frames, maar dan kan men nog rechtstreeks naar een pagina surfen. Je login script is blijkbaar heel onveilig, kun je misschien beter herschrijven...
Offline roy - 07/02/2005 13:29
Avatar van roy PHP gevorderde humm, er zit niks anders op denk ik.

Weer iemand toevallig een hele simpele? hoeft alleen maar login (naam+wachtwoord) en sessions?

Met Vriendlijke Groet,
Roy
Offline Fenrir - 07/02/2005 13:42
Avatar van Fenrir PHP expert Zie mijn vorige post:

  1. <?php
  2. if(!defined('SAFE')) die();
  3.  
  4. class user
  5. {
  6.  
  7. static $userinfo = array();
  8.  
  9. static function construct()
  10. {
  11. if(isset($_SESSION['userinfo']))
  12. {
  13. USER::$userinfo = $_SESSION['userinfo'];
  14. }
  15. }
  16.  
  17. static function isloggedin()
  18. {
  19. if(!empty(USER::$userinfo))
  20. {
  21. return true;
  22. }else
  23. {
  24. return false;
  25. }
  26. }
  27.  
  28. static function login($name, $pass)
  29. {
  30. if($data = Select("SELECT * FROM gebruikers WHERE loginnaam='" . addslashes($name) . "' AND wachtwoord='" . md5($pass) . "'"))
  31. {
  32. USER::$userinfo = $data;
  33. $_SESSION['userinfo'] = USER::$userinfo;
  34. return true;
  35. }else
  36. {
  37. return false;
  38. }
  39. }
  40. }
  41.  
  42. USER::construct();
  43.  
  44. ?>


  1. <?php
  2. if(USER::login($naam, $pass))
  3. {
  4. echo 'login gelukt!';
  5. }
  6. ?>
Offline Thomas - 07/02/2005 13:46 (laatste wijziging 07/02/2005 13:47)
Avatar van Thomas Moderator USER::$userinfo

is dat niet uber-smerig (OOP-wise gezien) ?

Je zou voor elke object- of klassevariabele toch een methode moeten schrijven (getters en setters) ?

USER :: $userinfo is hetzelfde als $this->$userinfo en dat is nou niet bepaald het idee van OOP...
Offline roy - 07/02/2005 13:59
Avatar van roy PHP gevorderde dat onderste kleine scriptje zet je dan op elke pagina die je wilt beveiligen na het inloggen?
Offline Fenrir - 07/02/2005 14:04 (laatste wijziging 07/02/2005 14:07)
Avatar van Fenrir PHP expert Volgens mij niet hoor, en de getters en setters, dat is eigelijk uber-smerig, maar in php kun je niet zoiets doen:

  1. <?php
  2. class test
  3. {
  4. private $test
  5. get{
  6. return $test
  7. }set
  8. {
  9. $test = strval($value);
  10. }
  11. }


En als je dan een set methode schrijft, dan krijg je zoiets:

static function setusetinfo($val)
{
USER :: $userinfo = $val;
}

en dat maakt niet echt veel verschil.


Citaat:
USER :: $userinfo is hetzelfde als $this->$userinfo en dat is nou niet bepaald het idee van OOP...

Ehhm, waarom niet? behalve dan dat het $this->userinfo moet zijn ipv $this->$userinfo, is er toch niets mis mee?

En ik krijg geen notices met error_reporting(E_STRICT); 

Citaat:
dat onderste kleine scriptje zet je dan op elke pagina die je wilt beveiligen na het inloggen?


nee, daar zet je:

  1. if(!USER::isloggedin()) die('Je mag deze pagina niet bekijken!');
Offline numlockrond - 07/02/2005 14:09
Avatar van numlockrond Onbekend het is toch niet echt de bedoeling om vanuit een methode in een class een variabele uit diezelfde class static aan te roepen, daar heb je $this->... voor.
Als je alles in je class altijd statisch aanroept kun je ook gewoon zonder classes werken.
Offline roy - 07/02/2005 14:12 (laatste wijziging 07/02/2005 16:00)
Avatar van roy PHP gevorderde
  1. <?php
  2. if(!defined('SAFE')) die();
  3.  
  4. class user
  5. {
  6.  
  7. static $userinfo = array();
  8.  
  9. static function construct()
  10. {
  11. if(isset($_SESSION['userinfo']))
  12. {
  13. USER::$userinfo = $_SESSION['userinfo'];
  14. }
  15. }
  16.  
  17. static function isloggedin()
  18. {
  19. if(!empty(USER::$userinfo))
  20. {
  21. return true;
  22. }else
  23. {
  24. return false;
  25. }
  26. }
  27.  
  28. static function login($name, $pass)
  29. {
  30. if($data = Select("SELECT * FROM gebruikers WHERE loginnaam='" . addslashes($name) . "' AND wachtwoord='" . md5($pass) . "'"))
  31. {
  32. USER::$userinfo = $data;
  33. $_SESSION['userinfo'] = USER::$userinfo;
  34. return true;
  35. }else
  36. {
  37. return false;
  38. }
  39. }
  40. }
  41.  
  42. USER::construct();
  43.  
  44. ?>



  1. <?php
  2. if(USER::login($naam, $pass))
  3. {
  4. echo 'login gelukt!';
  5. }
  6. ?>



Moet ik dit zien als twee aparte bestanden??
session.php en login.php? zoiets


nb. Hier moet ik zelf een formuliertje bij maken? geen probleem dat heb ik al..
Offline Thomas - 07/02/2005 14:28
Avatar van Thomas Moderator
Citaat:
Volgens mij niet hoor, en de getters en setters, dat is eigelijk uber-smerig, maar in php kun je niet zoiets doen:


  1. <?php
  2. class test
  3. {
  4. private $test
  5. get{
  6. return $test
  7. }set
  8. {
  9. $test = strval($value);
  10. }
  11. }
  12. ?>


Huh? wat ?! Nee dat is ook niet de bedoeling he ?

Wat dacht je hier van:

  1. <?php
  2. class test {
  3. private $test;
  4.  
  5. function get_test() {
  6. return $this->test;
  7. }
  8.  
  9. function set_test($val) {
  10. $this->test = $val;
  11. }
  12. }
  13. ?>


Het hele idee van classes is volgens mij dat jij voorschrijft hoe en wanneer je bepaalde vars kunt accessen / veranderen, en dat help je met $bla1->$bla2 wel een beetje om zeep...
Offline roy - 07/02/2005 16:01
Avatar van roy PHP gevorderde Zie mijn vorige post...

Moet ik het zien als twee bestanden?
Offline Thomas - 07/02/2005 16:06
Avatar van Thomas Moderator Dat kan - je kan je class, en een aanroep van een object van die class (op een webpagina) in twee aparte bestanden zetten he ?

Je include dan de class als je er gebruik van wilt maken op een webpagina.
Offline roy - 07/02/2005 16:39
Avatar van roy PHP gevorderde voorbeeld.php
  1. <?PHP
  2. // include de class
  3. include("class.login.php");
  4.  
  5. // start de class
  6. $cLogin = new login;
  7.  
  8. // check een sessie met de functie loginCheck
  9. if($cLogin->loginCheck("username") == TRUE)
  10. {
  11. // ingelogd
  12. echo "Logged in";
  13. } else
  14. {
  15. // niet ingelogd
  16. if($_SERVER['REQUEST_METHOD'] == "POST")
  17. {
  18. // formulier is verstuurd
  19. // waardes ophalen met de functie loginPost
  20. $sUsername = $cLogin->loginPost("username");
  21. $sPassword = $cLogin->loginPost("password");
  22. } else
  23. {
  24. // formulier printen
  25. echo $cLogin->loginForm("dezepagina.php");
  26. }
  27. }
  28. ?>


class.login.php
  1. <?PHP
  2. // start de class
  3. class login
  4. {
  5. // functie login check
  6. // checkt of een sessie bestaat
  7. // returned een boolean
  8. function loginCheck($sSessionName)
  9. {
  10. // checken of sessie geset is
  11. if(IsSet($_SESSION[$sSessionName]))
  12. {
  13. // zoja, return true
  14. return true;
  15. } else
  16. {
  17. // zonee, return false
  18. return false;
  19. }
  20. }
  21.  
  22. // login formulier
  23. function loginForm($sAction)
  24. {
  25. // het formulier in een variabele sReturn zetten
  26. $sReturn = "<form method='post' action='".$sAction."'>";
  27. $sReturn .= "Username: <input type='text' name='username'><BR>";
  28. $sReturn .= "Password: <input type='password' name='password'><BR>";
  29. $sReturn .= "<input type='submit' name='submit' value='Inloggen'>";
  30. $sReturn .= "<input type='reset' name='submit' value='Leeg velden'>";
  31. $sReturn .= "</form>";
  32. // formulier returnen
  33. return $sReturn;
  34. }
  35.  
  36. // post functie
  37. function loginPost($sName)
  38. {
  39. // post de waarde uit de variabele sName
  40. return $_POST[$sName];
  41. }
  42.  
  43. // functie login
  44. function login($sSessionName, $sSessionValue)
  45. {
  46. // zet de waarde van sSessionValue in de sessie sSessionName
  47. $_SESSION[$sSessionName] = $sSessionValue;
  48. }
  49. }
  50. ?>


Hij vergelijkt nu niks vanuit de database:s
en ik krijg deze foutmelding:
Warning: Missing argument 1 for login() in /var/www/html/Chris/class.login.php on line 44

Warning: Missing argument 2 for login() in /var/www/html/Chris/class.login.php on line 44
Offline Thomas - 07/02/2005 17:03
Avatar van Thomas Moderator Bij het aanmaken van het object wordt de methode met dezelfde naam als de class uitgevoerd.

Je hebt daar staan:
$cLogin = new login;

dit moet zijn:
$cLogin = new login($sessienaam, $sessiewaarde);
Offline Fenrir - 07/02/2005 17:49
Avatar van Fenrir PHP expert Ik bedoel meer iets als dit:
http://www.cfde...es_Example

Zo moet het eigenlijk. Maar omdat php dat niet ondersteunt (wss wel in v6), kun je het met functies doen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.301s