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.
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name="xxx"; // Database name
$tbl_name="members";
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['username'];
$mypassword=$_POST['password'];
$get="?ster=";
// To protect MySQL injection
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE gebruikersnaam='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
echo "<a href='updateprofile.php'>hier klikken $myusername</a>";
}
else {
echo "Wrong Username or Password";
}
?>
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));
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.
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'] . "'' ?
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..
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....
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']
;)
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
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...
@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
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):