login  Naam:   Wachtwoord: 
Registreer je!
 Forum

login/member

Offline vincentc - 20/05/2010 01:10
Avatar van vincentcLid Hallo,
Ik ben nieuw hier dus zal me ff voorstellen:
Ik ben vincent woon in utrecht in nederland en ben beginnend met php loop nu ik wat meer probeer te bereiken met php tegen behoorlijk wat problemen aan hoop dat iemand me kan helpen.


Mijn probleem:
Ik heb een site waarop mensen zich kunnen aanmelden als ze dit doen wordt alle info (land, naam etc.) opgeslagen in mijn db in de table members, dit gaat prima.

Nu moeten mensen ook kunnen inloggen dat gaat ook prima.

Maar nu het probleem, ik heb een standard pagina waarop mensen die inloggen terecht komen hierop kunnen ze hun profiel aanpassen/editten maar hoe krijg ik het voor elkaar dat ze de pagina editten die voor hun bedoeld is?


hier de codes die ik gebruik:

Inloggen:
Simpel html formpje met gebruikersnam/wachtwoord name: username/password

Simpel, geen uitleg nodig deze info wordt verstuurd naar checklogin.php.

checklogin.php:

  1. <?php
  2.  
  3.  
  4. $host="localhost"; // Host name
  5. $username=""; // Mysql username
  6. $password=""; // Mysql password
  7. $db_name="xxx"; // Database name
  8. $tbl_name="members";
  9.  
  10. // Connect to server and select databse.
  11. mysql_connect("$host", "$username", "$password")or die("cannot connect");
  12. mysql_select_db("$db_name")or die("cannot select DB");
  13.  
  14. // username and password sent from form
  15. $myusername=$_POST['username'];
  16. $mypassword=$_POST['password'];
  17. $get="?ster=";
  18. // To protect MySQL injection
  19. $myusername = stripslashes($myusername);
  20. $mypassword = stripslashes($mypassword);
  21. $myusername = mysql_real_escape_string($myusername);
  22. $mypassword = mysql_real_escape_string($mypassword);
  23.  
  24. $sql="SELECT * FROM $tbl_name WHERE gebruikersnaam='$myusername' and password='$mypassword'";
  25. $result=mysql_query($sql);
  26.  
  27. // Mysql_num_row is counting table row
  28. $count=mysql_num_rows($result);
  29. // If result matched $myusername and $mypassword, table row must be 1 row
  30.  
  31. if($count==1){
  32. // Register $myusername, $mypassword and redirect to file "login_success.php"
  33.  
  34. session_register("myusername");
  35. session_register("mypassword");
  36. echo "<a href='updateprofile.php'>hier klikken $myusername</a>";
  37.  
  38. }
  39. else {
  40. echo "Wrong Username or Password";
  41. }
  42. ?>


als mensen dan klikken op de link komen ze op de pagina updateprofile.php, boven aan de pagina staat:

  1. <?
  2. if(!session_is_registered(myusername)){
  3. header("location:index.php");
  4. }
  5. ?>


Maar hoe kan ik nu in de pagina laten uitlezen welk member nou precies is ingelogd?


Tis een heel verhaal maar hoop tog dat iemnd mij kan helpen!

BVD!

Vincent

14 antwoorden

Gesponsorde links
Offline vinTage - 20/05/2010 02:07
Avatar van vinTage Nieuw lid session_register is verouderd/depreciated, maargoed.

Je gebruikt gewoon de waarde van de session voor het updaten.

aanpassen.php
  1. <?php
  2. if(isset($_POST['naamVanSubmitKnoppie']))
  3. {
  4. $qry = mysql_query("update ".$tbl_name."
  5. set wachtwoord = '".mysql_real_escape_string($_POST['nieuw_wachtwoord'])."'
  6. where
  7. gebruikersnaam = '".mysql_real_escape_string($_SESSION['myusername'])."'"
  8. )or die(mysql_error());
  9. }
  10. ?>
Offline Joel - 20/05/2010 09:10 (laatste wijziging 20/05/2010 09:10)
Avatar van Joel Eigenaar Zoals vinTage al zei, sessions set je op de volgende manier

  1. <?php
  2. $_SESSION['username'] = "username";
  3. ?>


Vergeet ook niet dat je eerst de sessies moet 'activeren' in PHP. Ook op checkLogin.php

  1. <?php
  2. ?>
Offline BOONBE - 20/05/2010 09:56
Avatar van BOONBE Nieuw lid Persoonlijk zou ik niet $_SESSION["USERNAME"] maar $_SESSION["PARAMETER"] gebruiken waarin ik de unieke HASH KEY van je Member bestand zou steken.

Voor 'PARAMETER' kies je ook best een naam die eventuele Hackers niet direct doet vermoeden dat het hier om Member-key gaat.

Hierdoor verhoog je de security.

Hash-keys kan je maken door bijvoorbeeld gebruik te maken van md5 en sha1 functies die PHP kent.
vb: $HASHKEY=md5(sha1(date("Y/m/d h:i:s").$LOGINNAME));



Offline Jelmerholland - 20/05/2010 10:15
Avatar van Jelmerholland PHP beginner Ze kunnen de $_SESSION['VARS'] toch sowieso niet veranderen omdat die in de server zijn opgeslagen?
Offline BOONBE - 20/05/2010 11:35
Avatar van BOONBE Nieuw lid Je hebt in basis dus gelijk dat $_SESSION['vars'] op de server staan, doch ik wens je hier even te verwijzen naar volgende website:
http://www.tizag.com/phpT/phpsessions.php

Hier wordt vermeld dat het systeem toch niet waterdicht is. Dus beter even extra security inbouwen als we kunnen.
Offline Jelmerholland - 20/05/2010 13:07
Avatar van Jelmerholland PHP beginner
Citaat:
Note:If you are not experienced with session programming it is not recommended that you use sessions on a website that requires high-security, as there are security holes that take some advanced techniques to plug.


Juustem, maar als jij je 'Username' codeert met een md5() en sha1(), hoe kan je dat proces dan omdraaien?
Als je bijvoorbeeld wilt selecteren 'WHERE Username = '". $_SESSION['var'] . "'' ?

Moet je dan zoiets doen?

  1. $query = "
  2. SELECT
  3. *
  4. FROM
  5. table
  6. WHERE
  7. md5(sha1(Username)) = '" . mysql_real_escape_string($_SESSION['Username']) . "'
  8. ";

?

En als iemand jouw username weet, dan kan hij toch op z'n eigen pc die waarde coderen en dan je $_SESSION[var] veranderen?
Dan zou dit (volgens mij) nog niet helpen..

Offline BOONBE - 20/05/2010 13:28
Avatar van BOONBE Nieuw lid Even iets rechtzetten !!

Ik ging er van uit dat $_SESSION["USERNAME"] wordt gebruikt om op het volgende niveau een SQL in de aard van $sql="SELECT * FROM MemberTable WHERE USERNAME='".$_SESSION["USERNAME"]."'"; te gaan uitvoeren.

Mijn idee is dus in de MemberTable een veld te hebben HASHKEY met deze md5 sha1 value in.

De $sql wordt dan $sql="SELECT * FROM memberTable Where HASHKEY='".$_SESSION["PARAMETER"]."'"; waarbij $_SESSION["PARAMETER"] deze md5 sha1 value heeft.

Er is geen reverse op md5 sha1 mogelijk.

Nogmaals dit is geen waterdichte security maar biedt meer bescherming dan de vorige oplossingen....
Offline Jelmerholland - 20/05/2010 18:59
Avatar van Jelmerholland PHP beginner Volgens mij klopt het niet, want jij zet de session variabele in een md5(sha1(...)) codatie. HASKEY is toch niet gelijk aan md5(sha1()) ? Dan heb je alleen de sha1 gedaan in je query, waar laat je de md5 dan?

En je moet niet:
$_SESSION["Waarde"]
doen, kan beter met kleine quotejes
$_SESSION['Waarde']
;)
Offline Arphetic - 20/05/2010 20:40
Avatar van Arphetic Nieuw lid Jelmer, geen idee waar je het over hebt, maar wat boonbe bedoelt is het volgende:
In een sessie heb je een hash ($_SESSION['hash']) die bepaalt wie jij bent. Aan de hand van die hash kijk je dus welke username e.d. daarbij horen. Je checkt dus niet meer op WHERE username, maar op WHERE hashstring.

Ik snap wat BOONBE bedoelt, ik snap alleen niet waarom je geen $_SESSION['username'] zou moeten gebruiken...?

Verder:
"En als iemand jouw username weet, dan kan hij toch op z'n eigen pc die waarde coderen en dan je $_SESSION[var] veranderen?
Dan zou dit (volgens mij) nog niet helpen.."

Het veranderen van $_SESSION[var], like how? Show me an example 
Offline vincentc - 20/05/2010 23:44
Avatar van vincentc Lid super bedankt eindelijk eens een duidelijk antwoor...al volg ik julie niet helemaal in julie discussie...

Ik ga ermee an de slag, Bedankt!
Offline BOONBE - 21/05/2010 08:03
Avatar van BOONBE Nieuw lid Nogmaals voor de duidelijkheid:

Op het moment dat een gebruiker zich aanmeld, maak je een md5 sha1 key aan en sla je deze op in de databank.

Op het moment dat een gebruiker zich nu inlogt en het van belang is deze gebruiker te blijven identificeren doorheen zijn website bezoek, maak je nu gebruik van deze 'key' ipv zijn 'username' om zijn annoniemiteit te verhogen en daardoor minder interessant te zijn voor Hackers...
Bedankt door: vincentc
Offline Jelmerholland - 21/05/2010 10:38
Avatar van Jelmerholland PHP beginner @Arphetic
Ik weet niet hoe je 'm kan veranderen, maar waarom zou BOONBE 'm anders willen coderen? Hij suggereert er mee (zo komt het naar mij over), dat je een variabele kan aanpassen. En dat ie niet veilig zou zijn, waarom zou die dan niet veilig zijn? Als toch niemand er bij kan?

@BOONBE
Ok, maar dan kan je niet bij een topic doen wat wij nu ook hebben, dat hij je naam laat zien.. , of je moet nóg een extra column aanmaken maar dan heeft het dus alsnog geen zin 

Conclusie, ik snap er 't nut niet van eigenlijk... maar dat zal wel aan mij liggen 
Offline TotempaaltJ - 21/05/2010 16:56
Avatar van TotempaaltJ PHP interesse Ik snap het nut er ook niet van. Het is praktisch onmogelijk om een sessie te hacken, zolang je er maar voor zorgt dat je geen user content op je pagina echo't (of exec't) zonder het eerst door checks als html_entity te gebruiken. Ook moet je ervoor zorgen dat de sessies niet worden opgeslagen in je publieke folder (www of public_html of html ofzo). Zolang je website zich aan deze twee eisen houdt is de enige manier dat iemand je sessies hackt nog om je server te hacken.

Kortom: Maak je geen druk, en echo niks ongecheckt.

Maak een variabele in de sessie (niet directe user content):
  1. $_SESSION['gebruikersnaam'] = 'Totem';

Zoek die variabele op in een andere pagina:
  1. echo $_SESSION['gebruikersnaam'];
Bedankt door: vincentc
Offline leroyvanloon - 22/05/2010 00:06
Avatar van leroyvanloon Lid
  1. <?
  2. if(!session_is_registered(myusername)){
  3. @header("location:index.php");
  4. }
  5. ?>


de @ niet vergeten 
Bedankt door: vincentc
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.271s