[PHP] Gebruikers rechten geven.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrVegeta
  • Registratie: September 2002
  • Laatst online: 11-09 20:46

MrVegeta

! Dolf is rechtvaardig !

Topicstarter
Ik heb een portfolio website (http://www.no-illusions.nl) en die wil ik graag koppelen aan mijn opleiding. Op de portfolio heb ik alleen relevante info voor een bezoeker die wellicht interesse heeft in mijn diensten.

Maar nu wil dus ook de portfolio gebruiken voor school, ik wil namelijk competenties/verslagen/logboeken etc aan mijn werk koppelen maar dat is voor de niet school bezoeker helemaal niet van belang.

Dus ik wil graag een systeem maken waarmee ik mijn eigen website kan inloggen (andere bezoekers hoeven dat niet) en als ik ingelogt ben zie ik dus links/plaatjes etc die je niet ziet als je niet ingelogt bent.

DIt lijkt me niet echt heel moeilijk om te doen maar ik heb nog maar weinig ervaring in PHP, ik vraag hier ook niet om hele scripts maar meer naar keywords waar ik naar moet zoeken om dit kleine project klaar te krijgen. Als er iemand is die een script wil tikken voor me is dat ook prima maar ik leer het liever zelf.

Ik hoop dat het een duidelijk verhaal is.

Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps


Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
neem de eerste de beste turial door: http://www.google.be/sear...official&client=firefox-a

In het kort:
* Maak een database met users en wachtwoorden
code:
1
2
userID | username | password
1    | jantje         | één of andere hash van het wachtwoord

* Schrijf een login scriptje dat die combinatie controleert (let op voor sql injections (Wikipedia: SQL injection)!)
code:
1
2
3
4
5
6
7
if (submit){
 check in database of combinatie overeenkomt
 if (OK)
   zet een sessie of cookie 
 else
  foutmelding
}

* Toon met één of andere if-then relevante content:
code:
1
2
3
4
if (logged_in)
   echo 'dit mogen enkel ingelogde gebruikers zien';
else
  echo 'jij bent niet ingelogd!';


ga hier maar eens mee aan de slag ;)

[ Voor 77% gewijzigd door webinn op 11-01-2009 15:24 ]


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
je hebt gelijk, het is zeker niet makkelijk om er zeker van te zijn dat het allemaal veilig is :)

Wat tips die je misschien op weg kunnen helpen:
- centraliseer de inlog/uitlog/autorisatie.. dit maakt het niet alleen makkelijker dingen te wijzigen, maar je verzekert jezelf er ook van dat alle autorisaties en dergelijke op de zelfde manier worden behandelt ;)

- als je cookies gebruikt voor langdurige inlogsessies, bedenk dan een goede manier om de cookies te valideren. Sla dus niet alleen de userID op, maar bijvoorbeeld 1 cookie met userID, en 1 met een salted hash van gebruikersnaam+wachtwoord+id.

- dwing mensen niet om een cookie te hebben, omdat zoekmachines enzo geen cookies accepteren. Dit zorgt nog wel eens voor een redirect loop :)

- sla in de database nooit de plaintext wachtwoorden op. Sla altijd een hash op, en controleer inlog-requests aan de hand van die hashes.

- zorg ervoor dat twee gebruikers niet dezelfde username kunnen hebben.


Nog een paar zaken die ik heel erg handig vind:

- maak een "guest" gebruiker aan die gebruikt word door iedereen die niet ingelogd is. Dit maakt het makkelijker om gebruikersinstellingen en gebruikersrechten te beheren. Ook kan je dan bijvoorbeeld comments door guests toestaan, en alsnog bijhouden hoeveel guests er gepost hebben. Dus voor statistieken is het ook heel handig ;)
- maak de user tabel van SQL niet te groot. als je veel instellingen of informatie van de gebruiker moet weten, hou deze apart van de user tabel. De user tabel hoeft enkel de userdata te bevatten die belangrijk is (id, username, password, usergroup, etc). instellingen zoals "geboortedatum" kan je ook in een aparte tabel bewaren :)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • MrVegeta
  • Registratie: September 2002
  • Laatst online: 11-09 20:46

MrVegeta

! Dolf is rechtvaardig !

Topicstarter
Ik ben dus bezig met die "tutorial" voor het maken van een DB waardoor er kan worden ingelogt op de website, ik loop tegen een fout aan, namelijk ik krijg deze fout,

"Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Peter\xampp\htdocs\login\checklogin.php on line 37
Wrong Username or Password"

Nu heb ik daar op gezocht en heb ik gelezen dat ik dit,
PHP:
1
$result=mysql_query($sql);

kan vervangen door,
PHP:
1
$result = mysql_query ($query) or die (mysql_error ());

om er een duidelijkere foutmelding uit te halen. Na ik dit heb gedaan kreeg ik dit dus op de pagina waneer ik er op inlogde: "Query was empty".

Dit samen met de melding dat er een foute username/password wordt gegeven duid er dus op dat de gegevens die worden ingevoerd niet worden "meegenomen" naar de juist plek. Er wordt wel verbinding gemaakt met de DB. Maar de query blijft wel leeg.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
ob_start();
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="login"; // Database name
$tbl_name="members"; // Table name

// 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");

// Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about 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 username='$myusername' and password='$mypassword'";
$result = mysql_query ($query) or die (mysql_error ());

// 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");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>


Sorry voor het posten van de code ik probeer wel veel zelf uit te zoeken maar ja kan

Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps


Acties:
  • 0 Henk 'm!

  • Down
  • Registratie: Februari 2005
  • Laatst online: 12:32
Je stopt je query in $sql maar je geeft $query aan mysql_query B)

Mother north, how can they sleep while their beds are burning?


Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
wat is dat voor brakke tutorial, dat ze het wachtwoord in plaintext opslaan? :')
Ik zal toch zelf ook wat nadenken.. common sense + punten die boven je staan aangegeven ;)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Die tutorial is daarnaast nog eens extreem oud, session_register moet je echt niet gebruiken.

Trouwens link0007...ik kan me aardig vinden in je tips behalve de laatste: ik ben benieuwd waarom je 2 tabellen wilt hebben voor dezelfde user? Waarom zou je de geboortedatum opslaan in een losse tabel ipv. in de row van de user?

Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
Cartman: Het kan natuurlijk wel (misschien had ik beter "tijdzone" oid kunnen gebruiken als voorbeeld), maar ik vind dat een user tabel redelijk compact moet zijn, en instellingen van een user niet thuishoren in de user tabel, maar in een settings tabel :)

Mag genegeerd worden, is niet echt van levensbelang bedenk ik nu :)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
link0007 schreef op zondag 11 januari 2009 @ 22:45:
Cartman: Het kan natuurlijk wel (misschien had ik beter "tijdzone" oid kunnen gebruiken als voorbeeld), maar ik vind dat een user tabel redelijk compact moet zijn, en instellingen van een user niet thuishoren in de user tabel, maar in een settings tabel :)

Mag genegeerd worden, is niet echt van levensbelang bedenk ik nu :)
Ik ben benieuwd _waarom_ je dat op die manier wilt doen en waarom je denkt dat je usertabel compact moet zijn? Ik zie het nut bij instellingen oid wel als het een 1:n relatie betreft maar 1:1 is alleen maar omslachtig en niet-logisch. Van levensbelang is het niet nee, maar wellicht breng je mensen onnodig om gekke ideeen zo.

Acties:
  • 0 Henk 'm!

  • MrVegeta
  • Registratie: September 2002
  • Laatst online: 11-09 20:46

MrVegeta

! Dolf is rechtvaardig !

Topicstarter
Zo vandaag op school het één en ander met een leraar besproken en daarna weer op pad gegaan en nu heb ik de database login en registratie formulier klaar en snap het ook nog (behoorlijk ;) ).

Nu wil ik vanavond nog bezig met deze "login" site en die info te koppelen aan de rechten van een bezoeker.

Omdat ik online maar één DB is en die al in gebruik is kan ik het niet online zetten maar wat moet ik gebruiken om de site duidelijk te maken dat de bezoeker ingelogd is en nu dus extra rechten heeft.

//edit. http://www.tutorialized.c...Membership-with-PHP/40087 deze tutorial heeft me goed geholpen bij het maken van de database etc.

Waar ik zelf aan zit te denken is om bij de registratie een checkbox te zetten die je kan aanvinken en dat dan te koppelen aan de DB waardoor er bijvoorbeeld in het veld "rights" "viewing" en daar dan een 1 in komt.

En in de pagina moet er dan iets komen met,

if $_USERRIGHTS = 1 SHOW echo"text".
else
""

Ik ben nog lang niet goed genoeg met PHP om hier zelf een script voor te maken maar wil graag weten welke keywords ik kan gebruiken om me hier mee te helpen :).

[ Voor 39% gewijzigd door MrVegeta op 12-01-2009 23:28 ]

Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps


Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
ik denk dat je zelf (als admin) iemand rechten moet geven en niet bij de registratie een veldje moet voorzien of ze bepaalde rechten krijgen of niet.

Wat je doet is een admin pagina maken met een wachtwoord om iemand rechten te geven (of eventueel handmatig in je tabel aan te passen in bv phpmyadmin).

Je zou dan een veld HAS_ACCESS kunnen maken. Op de pagina waar je gebruiker iets moet kunnen zien kan je dan een query uitvoeren en de database waarde opvragen. Indien de gebruiker toegang heeft, kan je tonen wat je wil tonen

Acties:
  • 0 Henk 'm!

  • MrVegeta
  • Registratie: September 2002
  • Laatst online: 11-09 20:46

MrVegeta

! Dolf is rechtvaardig !

Topicstarter
webinn schreef op dinsdag 13 januari 2009 @ 11:00:
ik denk dat je zelf (als admin) iemand rechten moet geven en niet bij de registratie een veldje moet voorzien of ze bepaalde rechten krijgen of niet.

Wat je doet is een admin pagina maken met een wachtwoord om iemand rechten te geven (of eventueel handmatig in je tabel aan te passen in bv phpmyadmin).

Je zou dan een veld HAS_ACCESS kunnen maken. Op de pagina waar je gebruiker iets moet kunnen zien kan je dan een query uitvoeren en de database waarde opvragen. Indien de gebruiker toegang heeft, kan je tonen wat je wil tonen
Ja dat maakt ook verder niet uit vooralsnog ben ik de enige die zich registreert en inlogt op de website. Een exta veld maken met "ACCES" dus, ik zal me verdiepen in hoe ik die waarde kan ophalen en daar aan kan koppelen.

Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 20-09 16:23

ReseTTim

Chocolate addicted

gebruik eerst session_start() en $_SESSION['myusername']

lalala.... laat..

[ Voor 20% gewijzigd door ReseTTim op 13-01-2009 11:12 ]

Mijn profiel - Te koop: Overzicht van spullen..


Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
MrVegeta schreef op dinsdag 13 januari 2009 @ 11:06:
[...]


Ja dat maakt ook verder niet uit vooralsnog ben ik de enige die zich registreert en inlogt op de website. Een exta veld maken met "ACCES" dus, ik zal me verdiepen in hoe ik die waarde kan ophalen en daar aan kan koppelen.
ook hier weer een kleine google tip: http://www.google.be/sear...p+query&btnG=Zoeken&meta= O-)

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Het is belangrijk dat je het verschil zit tussen authenticatie (wie ben jij) en authorisatie (wat mag jij) in gedachten houdt. Het is dus verstandig je login systeem meteen op te delen in gebruikers (username, password), groepen (waar gebruikers toe kunnen behoren) en rechten (die aan groepen en/of gebruikers toegekend kunnen worden). Het eerste voorbeeld met die if-logged-in is heel aardig als een eerste begin, maar logged in zijn is geen authorisatie, je wilt toch echt checken of een ingelogde gebruiker ook bepaalde rechten heeft.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • MrVegeta
  • Registratie: September 2002
  • Laatst online: 11-09 20:46

MrVegeta

! Dolf is rechtvaardig !

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username']))
{
?>
     
Hi this is some extra content you can see because your logged in.
     
<?php
}
?> 


Zo werkt het :), boven aan de pagina staat een code die de sessie onthoud tot er wordt uitgelogt.
En met deze code kan ik content plaatsen die je niet ziet als je niet bent ingelogt.

Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps


Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
dit is zeker een goede basisoplossing als je niet met verschillende niveaus van permissies, toegang... wil werken :) En nu kan je stilaan gaan experimenteren met meer php ;)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Juist ja. Inderdaad heb je nu een basisonderscheid tussen ingelogd of niet-ingelogd. Nu alleen nog die rechten regelen. Met een true of false is de verdeling van je rechten nogal basic.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • MrVegeta
  • Registratie: September 2002
  • Laatst online: 11-09 20:46

MrVegeta

! Dolf is rechtvaardig !

Topicstarter
Nu stilaan beginnen met het maken van een heel simpel CMS systeem :).

Geeft steekhoudelijke argumenten terwijl hij niet weet waar het over gaat. BlizzBoys, HD casts van StarCraft II gemaakt door Tweakers! Het begint, Zombiepocalyps


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

link0007 schreef op zondag 11 januari 2009 @ 15:33:
- als je cookies gebruikt voor langdurige inlogsessies, bedenk dan een goede manier om de cookies te valideren. Sla dus niet alleen de userID op, maar bijvoorbeeld 1 cookie met userID, en 1 met een salted hash van gebruikersnaam+wachtwoord+id.
Waarom zou een sessie-id sowieso ook maar enigszins gekoppeld moeten zijn aan username en/of wachtwoord en/of id? Het moet vooral random en niet raadbaar zijn. En vaste elementen zijn nou eenmaal geen goede bron van entropie.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1