Edit script Beveiliging
Pagina: « vorige 1 2 3 4 volgende »
Debug eensCode (php)
Pagina = wit
zet dit bovenaan je pagina:
misschien heb je er wat aan ;-)
Uitleg van het idee
Als eerste geef je elke optie die je als gebruiker kan doen een id
Vb:
Code (php)
1
2
3
4
5
2
3
4
5
Standaart als je member bent: 0
Replies plaatsen: 1
kan replies edite: 2
kan users deleten: 3
alle andere admin opties: 4
Replies plaatsen: 1
kan replies edite: 2
kan users deleten: 3
alle andere admin opties: 4
Nu gaan we het juiste getal uitrekenen
dat doen we door: 2^(het id)
Code (php)
1
2
3
4
5
2
3
4
5
Members pagina bekijken: 2^0 = 1
Replies plaatsen: 2^1 = 2
kan replies edite: 2^2 = 4
kan users deleten: 2^3 = 8
alle andere admin opties: 2^4 = 16
Replies plaatsen: 2^1 = 2
kan replies edite: 2^2 = 4
kan users deleten: 2^3 = 8
alle andere admin opties: 2^4 = 16
nu geef je een gebruiker een getal met wat hij allemaal mag,
Bv
Als je wilt dat iemand deze opties kan,
- Member (getal 1)
- Kan users deleten (getal 8)
- Alle andere admin opties (getal 16)
dan geef je deze persoon het getal 25 (1+8+16 = 25)
Volgende stap:
Om te controleren of je gebruiker 'Member' opties heeft (voor bv het bekijken van een pagina)
doe je dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// Je functies enzo includen die de gegevens ophalen van je member
// In dit voorbeeld staat het 'getal/je rang opties' in $user['rang']
// nu kijken of de gebruiker een 'member' status heeft
if (($user['rang'] & 1) == 1)
{
// jeej je mag de pagina zien
echo "Hey hey<br />";
}
else
{
// Niet de juiste rang
echo "Doei doei<br />";
}
?>
// Je functies enzo includen die de gegevens ophalen van je member
// In dit voorbeeld staat het 'getal/je rang opties' in $user['rang']
// nu kijken of de gebruiker een 'member' status heeft
if (($user['rang'] & 1) == 1)
{
// jeej je mag de pagina zien
echo "Hey hey<br />";
}
else
{
// Niet de juiste rang
echo "Doei doei<br />";
}
?>
Als je wilt kijken of deze persoon users kan deleten doe je dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// Je functies enzo includen die de gegevens ophalen van je member
// In dit voorbeeld staat het 'getal/je rang opties' in $user['rang']
// nu kijken of de gebruiker een 'member' status heeft
if (($user['rang'] & 8) == 8)
{
// Joepie we mogen users deleten
echo "Ga je gang :-)<br />";
}
else
{
// Niet de juiste rang
echo "U bent de zwakste schakel; totziens.<br />";
}
?>
// Je functies enzo includen die de gegevens ophalen van je member
// In dit voorbeeld staat het 'getal/je rang opties' in $user['rang']
// nu kijken of de gebruiker een 'member' status heeft
if (($user['rang'] & 8) == 8)
{
// Joepie we mogen users deleten
echo "Ga je gang :-)<br />";
}
else
{
// Niet de juiste rang
echo "U bent de zwakste schakel; totziens.<br />";
}
?>
Eerder deze uitleg had ik rang 25 (1+8+16 = 25)
dus ik mag beide dingen zien.
had ik rang 17 gehad (1+17) dan had ik geen users mogen deleten
ik hoop dat deze uitleg duidelijk is en dat je er wat aan hebt,
persoonlijk vind ik dit toch 1 van de betere 'rang systemenen' aangezien je oneindig veel opties kan maken. en omdat je over elke gebruike tot in de details kan laten besilissen wat hij wel of niet kan.
Gewijzigd op 01/01/1970 01:00:00 door Jelle -
ik heb nu dit script
Code (php)
en in de db de user rank 4 gegeven en krijg nu een error hier volgend me inlog script maby ligt het hieraan:
Code (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
43
44
45
46
47
48
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
43
44
45
46
47
48
<?php
include("config.php");
if(!isset($_POST['submit']))
{
echo ('<form action='.$_SERVER['PHP_SELF'].' method="post">
Gebruikersnaam:<br><input type="text" name="gebruikersnaam" size="25"><br>
Wachtwoord:<br><input type="password" name="wachtwoord" size="25"><br>
<br><input type="submit" value="submit" name="submit"><br>
</form>');
}
else
{
$user = $_REQUEST['gebruikersnaam'];
$pass = $_REQUEST['wachtwoord'];
$user = strip_tags($user);
$pass = strip_tags($pass);
$user = str_replace(" ","",$user);
$pass = str_replace(" ","",$pass);
$user = str_replace("%20","",$user);
$pass = str_replace("%20","",$pass);
$user = addslashes($user);
$pass = addslashes($pass);
$pass = md5($pass);
$request = "SELECT * FROM users WHERE wachtwoord='".$pass."' AND gebruikersnaam='".$user."'";
$results = mysql_query( $request ) or die ( mysql_error() );
if(mysql_num_rows($results))
{
$getid = "SELECT * FROM users WHERE gebruikersnaam='".$user."' LIMIT 1";
$getidexec = mysql_query($getid) or die (mysql_error() );
while($r=mysql_fetch_array($getidexec))
{
$id = $r['id'];
$rank = $r['rank'];
}
$_SESSION['id'] = $id;
$_SESSION['rank'] = $rank;
echo 'User Logged in.<META HTTP-EQUIV=Refresh CONTENT="2; URL=editcontent.php">';
}
else
{
echo 'Username and password do not match.
<META HTTP-EQUIV=Refresh CONTENT="2"; URL="'.$_SERVER['PHP_SELF'].'">';
exit();
}
}
?>
include("config.php");
if(!isset($_POST['submit']))
{
echo ('<form action='.$_SERVER['PHP_SELF'].' method="post">
Gebruikersnaam:<br><input type="text" name="gebruikersnaam" size="25"><br>
Wachtwoord:<br><input type="password" name="wachtwoord" size="25"><br>
<br><input type="submit" value="submit" name="submit"><br>
</form>');
}
else
{
$user = $_REQUEST['gebruikersnaam'];
$pass = $_REQUEST['wachtwoord'];
$user = strip_tags($user);
$pass = strip_tags($pass);
$user = str_replace(" ","",$user);
$pass = str_replace(" ","",$pass);
$user = str_replace("%20","",$user);
$pass = str_replace("%20","",$pass);
$user = addslashes($user);
$pass = addslashes($pass);
$pass = md5($pass);
$request = "SELECT * FROM users WHERE wachtwoord='".$pass."' AND gebruikersnaam='".$user."'";
$results = mysql_query( $request ) or die ( mysql_error() );
if(mysql_num_rows($results))
{
$getid = "SELECT * FROM users WHERE gebruikersnaam='".$user."' LIMIT 1";
$getidexec = mysql_query($getid) or die (mysql_error() );
while($r=mysql_fetch_array($getidexec))
{
$id = $r['id'];
$rank = $r['rank'];
}
$_SESSION['id'] = $id;
$_SESSION['rank'] = $rank;
echo 'User Logged in.<META HTTP-EQUIV=Refresh CONTENT="2; URL=editcontent.php">';
}
else
{
echo 'Username and password do not match.
<META HTTP-EQUIV=Refresh CONTENT="2"; URL="'.$_SERVER['PHP_SELF'].'">';
exit();
}
}
?>
hier mij db
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`gebruikersnaam` varchar(32) NOT NULL default '',
`wachtwoord` varchar(32) NOT NULL default '',
`email` text NOT NULL,
`rank` int(2) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
ik snap het echt niet meer...
Gewijzigd op 01/01/1970 01:00:00 door Crazyme
wat geeft je error weer?
moet zijn
$id['rank']
geen spatie ertussen
edit:
sorry voor dubbele post.
edit2
ik ben slordig geweest met de haakjes
($id ['rank'] & 1) == 1)
moet zijn
(($id ['rank'] & 1) == 1)
Gewijzigd op 01/01/1970 01:00:00 door Jelle -
jordy:
wat geeft je error weer?
ik heb de spatie weg gehaalt hielp niet veel. de fout melding is nu
de error was toen Notice: Undefined variable: user /www/htdocs/tijdelijk/editcontent.php on line 46
Doei doei
?>
script is nu
if (($user['rank'] & 1) == 1)
{
// jeej je mag de pagina zien
echo "Hey hey<br />";
}
else
{
// Niet de juiste rang
echo "Doei doei<br />";
}
hij kent de variables niet zegt tie maar variable id kent hij ook niet... het login script staat in een post hiervoor..
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Jelle -
Notice: Undefined variable: rank in /www/htdocs/wwwinfrc/http/tijdelijk/editcontent.php on line 46
Doei doei
?>
script is:
if(($rank & 1) == 1)
{
// jeej je mag de pagina zien
echo "Hey hey<br />";
}
else
{
// Niet de juiste rang
echo "Doei doei<br />";
}
alvast heel erg bedankt voor je hulp!!!
want hij weet niet van het bestaan van $rank.
terwijl als je legaal bent ingelogt wordt $rank aangemaakt.
zet dit
ergens in je config.php
nu zeg je standaart dat de gebruiker helemaal geen rechten heeft. als deze zich inlogt (of al ingelogt heeft en dat staat nog in een sessie)
dan krijgt hij zijn rank.
Gewijzigd op 01/01/1970 01:00:00 door Crazyme
een user met rank 4 kan alleen hetgeen bij optie 4 zien. als je wilt dat de user optie 4 en 1 kan. moet je hem rank 5 (1+4) geven.
hieronder nogmaals me voorbeeldje
Code (php)
1
2
3
4
5
2
3
4
5
Members pagina bekijken: 2^0 = 1
Replies plaatsen: 2^1 = 2
kan replies edite: 2^2 = 4
kan users deleten: 2^3 = 8
alle andere admin opties: 2^4 = 16
Replies plaatsen: 2^1 = 2
kan replies edite: 2^2 = 4
kan users deleten: 2^3 = 8
alle andere admin opties: 2^4 = 16
(een rank die alles kan zou dus 31 zijn (1+2+4+8+16)
rank 16 (16) kan alleen
'Alle andere admin opties'
terwijl iemand met rank 15 (1+2+4+8) deze dingen kan
'Replies plaatsen'
'kan replies edite'
'kan users deleten'
je kan natuurlijk helemaal zelf bepalen waar elke optie voor staat. dit is alleen een voorbeeldje.
je kan ook oneindig doorgaan.
Gewijzigd op 01/01/1970 01:00:00 door Jelle -
if(($rank & 1) == 1)
{
// jeej je mag de pagina zien
echo "Welkom<br />";
}
else
{
// Niet de juiste rang
echo "U bent niet ingelogt!<br />";
}
en de user heeft rank 1 wat is het probleem?
- Wat krijg je in beeld
- Wat is de fout
Daarna zal ik je weer verder helpen.
misschien kom je er in de tussentijd zelf wel uit ;-)
succes!
huidige script:
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("config.php");
if(isset($_SESSION['rank']))
$rank = $_SESSION['rank'];
else
$rank = 0;
echo $rank."<br />"; // Waarde van rank laten zien
if(($rank & 1) == 1)
{
// jeej je mag de pagina zien
echo "Welkom<br />";
}
else
{
// Niet de juiste rang
echo "U bent niet ingelogt!<br />";
}
login script:
include("config.php");
if(!isset($_POST['submit']))
{
echo ('<form action='.$_SERVER['PHP_SELF'].' method="post">
Gebruikersnaam:<br><input type="text" name="gebruikersnaam" size="25"><br>
Wachtwoord:<br><input type="password" name="wachtwoord" size="25"><br>
<br><input type="submit" value="submit" name="submit"><br>
</form>');
}
else
{
$user = $_REQUEST['gebruikersnaam'];
$pass = $_REQUEST['wachtwoord'];
$user = strip_tags($user);
$pass = strip_tags($pass);
$user = str_replace(" ","",$user);
$pass = str_replace(" ","",$pass);
$user = str_replace("%20","",$user);
$pass = str_replace("%20","",$pass);
$user = addslashes($user);
$pass = addslashes($pass);
$pass = md5($pass);
$request = "SELECT * FROM users_infraspecials WHERE wachtwoord='".$pass."' AND gebruikersnaam='".$user."'";
$results = mysql_query( $request ) or die ( mysql_error() );
if(mysql_num_rows($results))
{
$getid = "SELECT * FROM users_infraspecials WHERE gebruikersnaam='".$user."' LIMIT 1";
$getidexec = mysql_query($getid) or die (mysql_error() );
while($r=mysql_fetch_array($getidexec))
{
$id = $r['id'];
$rank = $r['rank'];
}
$_SESSION['id'] = $id;
$_SESSION['rank'] = $rank;
echo 'User Logged in.<META HTTP-EQUIV=Refresh CONTENT="2; URL=editcontent.php">';
}
else
{
echo 'Username and password do not match.
<META HTTP-EQUIV=Refresh CONTENT="2"; URL="'.$_SERVER['PHP_SELF'].'">';
exit();
}
}
Code (php)
Verder is echo geen functie, daar horen dus geen ( en ) bij te staan. Het is tevens niet handig om de ene keer dubbele quotes in je php-code te gebruiken en de andere keer enkele. Er zit bij jou geen enkele logica in. Ik gebruik in php altijd enkele quotes, behalve om een query (die heb jij ook goed staan). In html moet je dubbele quotes gebruiken, daar heb je geen keuze in.
het script werkt ondertussen en hij laat zien aan elke user wat hij moet laten zien.
er is echter nog 1 probleem er zitten natuurlijk nog andere functies in het script ik heb bijvoorbeeld de volgende link <a href="editcontent.php?mode=edit&id='.$r['id'].'">Edit</a> als je daarop drukt krijg je een edit gedeelte te zien je blijft in dezelfde pagina hij is echter de user vergeten en je moet weer opnieuw inloggen... het sluit de sessie ofzo.. hoe zorg ik ervoor dat de sessie open blijft?
Als je maar 1 ding hebt in een lus hoef je daar niet helemaal haakjes bij te zetten
Persoonlijk vind ik bij 1 optie het overzichtelijker om geen haakjes te plaatsen. als je goed met tabs werkt zie je alles in 1 opzicht. en het wordt daardoor niet rommelig met al die haakjes.
Voorbeeld:
Code (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
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
<?php
// Met haakjes
if($getal == 1)
{
echo "1";
}
elseif($getal == 2)
{
echo "2";
}
elseif($getal == 3)
{
echo "3";
}
elseif($getal == 4)
{
echo "4";
}
// Of zonder haakjes
if($getal == 1)
echo "1";
elseif($getal == 2)
echo "2";
elseif($getal == 3)
echo "3";
elseif($getal == 4)
echo "4";
// In dit geval vind ik zonder haakjes overzichtelijker
// Let op: het is alleenmaar wat ik vind ;-)
?>
// Met haakjes
if($getal == 1)
{
echo "1";
}
elseif($getal == 2)
{
echo "2";
}
elseif($getal == 3)
{
echo "3";
}
elseif($getal == 4)
{
echo "4";
}
// Of zonder haakjes
if($getal == 1)
echo "1";
elseif($getal == 2)
echo "2";
elseif($getal == 3)
echo "3";
elseif($getal == 4)
echo "4";
// In dit geval vind ik zonder haakjes overzichtelijker
// Let op: het is alleenmaar wat ik vind ;-)
?>
@ Crazyme
Goed dat het werkt (Y)
Zet
helemaal bovenin je config file.