GET id in url beveiligen
Pagina: « vorige 1 2 3 4 volgende »
Frank Nietbelangrijk op 17/05/2015 22:09:18:
Johan: Don't do it! Clear your mind!
Een gebruiker toetst in wat hij wil intoetsen als url. Ook met md5, unique_id or whatever string er in.
Stop je energie in "WAT LAAT IK ZIEN AAN WELKE GEBRUIKER".
(Hoeveel moeite kost het om iemand van een slecht idee af te helpen - lieve hemel :O )
Een gebruiker toetst in wat hij wil intoetsen als url. Ook met md5, unique_id or whatever string er in.
Stop je energie in "WAT LAAT IK ZIEN AAN WELKE GEBRUIKER".
(Hoeveel moeite kost het om iemand van een slecht idee af te helpen - lieve hemel :O )
Wees niet te snel boos ik doe wat er gezegd wordt. unique_id was alleen een extra laag om id nummer te veranderen maar dat wil je er van af komen dat begrijp ik nu.
Wat we samen hebben gemaakt heb ik voor profiel pagina toegepast dus iedereen kan alleen zijn eigen gegevens aanpassen van naam tot email adres.
Dan zit ik nog bij "Stop je energie in "WAT LAAT IK ZIEN AAN WELKE GEBRUIKER"." Het werkt goed alleen ik moet nog er voor zorgen dat user_id alleen database regels van used_id kan bewerken.
ff domme vergelijking:
bij ieder huis kun je proberen of er een deur los is. Nu wil jij dat mensen die door de straat lopen de deuren niet meer kunnen zien. Camoufleren met baksteenmotief dan maar of zo ? ;-)
Stel jij logt in en upload je werkstuk dan is ID van je werkstuk 3.
Ik log in en upload voor de gein om te kijken waar de url op eindigd, dan zie ik achter ID 4 staan. Ik verander 4 naar 3 dan kan ik je geuploade bestand verwijderen.
Wat we net hadden was handig ik kon alleen met mij eigen ID bekijken, dat wil ik veranderen naar row van geuploaden bestanden en dat laten controleren door geuploaden gebruikers. Iedereen mag alleen zijn eigen geuploaden bestanden bewerken.
Gewijzigd op 18/05/2015 00:15:10 door johan de wit
hoe zit zo een row van geuploade bestanden er nu uit? ik bedoel welke kolommen heb je?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[mysql-server]
|
|- [database]
|
|---- [tabel] gebruikers
| |
| |---- [kolom] customer_id
| |---- [kolom] name
| |---- [kolom] email
|
|---- [tabel] werkstukken
|
|---- [kolom] werkstuk_id
|---- [kolom] customer_id
|---- [kolom] titel
|
|- [database]
|
|---- [tabel] gebruikers
| |
| |---- [kolom] customer_id
| |---- [kolom] name
| |---- [kolom] email
|
|---- [tabel] werkstukken
|
|---- [kolom] werkstuk_id
|---- [kolom] customer_id
|---- [kolom] titel
Kortom er is een kolom voor geuploade eigenaren aanwezig.
Toevoeging op 18/05/2015 00:29:00:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?PHP
session_start();
if (!(isset($_SESSION['user_login_status']) && $_SESSION['user_login_status'] != '')) {
header ("Location: index.php");
exit; // NA HEADER EEN EXIT EN JE SCRIPT STOPT DAN OOK DAADWERKELIJK
}
// INITIALISATIE ID MET DEFAULTWAARDE 0
$id = 0;
if(isset($_GET['id'])) {
$id = intval($_GET['id']);
}
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
// ALLEEN ROW VAN SESSIES IS TOEGESTAAN
if(isset($id)) {
if($id == $_SESSION['user_id']) {
verwijder_bestand(); // <--- WAT MOET HIER KOMEN?
} else {
echo "Foei, stout, niet lief! Jij mag niet andermans spulletjes verwijderen.";
}
} else {
echo "Zonder ID kan ik niks!";
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=', '', '');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabel SET name=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $_POST['name']);
$stmt->bindParam(2, $_POST['uid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: lijst.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabel WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$username = $row['user_name'];
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
<form id="<?php echo $row["id"]; ?>" action="" method="POST">
<input type="hidden" value="<?php echo $id; ?>" name="mid">
<div class="container">
<div class="panel-heading">
<h3 class="panel-title">Gegevens</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<table class="table">
<tbody>
<tr>
<td>Naam</td>
<td><input class="form-control" type="text" id="formGroupInputSmall" placeholder="Naam"name="username" value="<?php echo $username; ?>"/></td>
</tr>
</tbody>
</table>
<input class="btn btn-default" type="submit" name="submit_btn" value="Bevestigen"/>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
session_start();
if (!(isset($_SESSION['user_login_status']) && $_SESSION['user_login_status'] != '')) {
header ("Location: index.php");
exit; // NA HEADER EEN EXIT EN JE SCRIPT STOPT DAN OOK DAADWERKELIJK
}
// INITIALISATIE ID MET DEFAULTWAARDE 0
$id = 0;
if(isset($_GET['id'])) {
$id = intval($_GET['id']);
}
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
// ALLEEN ROW VAN SESSIES IS TOEGESTAAN
if(isset($id)) {
if($id == $_SESSION['user_id']) {
verwijder_bestand(); // <--- WAT MOET HIER KOMEN?
} else {
echo "Foei, stout, niet lief! Jij mag niet andermans spulletjes verwijderen.";
}
} else {
echo "Zonder ID kan ik niks!";
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=', '', '');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabel SET name=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $_POST['name']);
$stmt->bindParam(2, $_POST['uid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: lijst.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabel WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$username = $row['user_name'];
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
<form id="<?php echo $row["id"]; ?>" action="" method="POST">
<input type="hidden" value="<?php echo $id; ?>" name="mid">
<div class="container">
<div class="panel-heading">
<h3 class="panel-title">Gegevens</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<table class="table">
<tbody>
<tr>
<td>Naam</td>
<td><input class="form-control" type="text" id="formGroupInputSmall" placeholder="Naam"name="username" value="<?php echo $username; ?>"/></td>
</tr>
</tbody>
</table>
<input class="btn btn-default" type="submit" name="submit_btn" value="Bevestigen"/>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
Gewijzigd op 19/05/2015 13:44:31 door johan de wit
Heb ik het goed?
Je zult in mijn code jouw taken moeten moeten verwerken, niet daaronder.
Of het nu om verwijderen of wijzigen gaat, het komt in mijn code op hetzelfde neer.
En die functie die er in staat, die moet je zelf aanmaken of toevoegen.
Gewijzigd op 19/05/2015 11:39:49 door - Ariën -
Ik moet dan stukje van vorige code eruit halen en van jou inbouwen.
Ja, en kijk logisch wat mijn code precies doet, en bouw hierop uit.
Zowiezo kijk ik goed er naar maar om zeker te zijn stel ik van te voren vragen. Als het wel/niet lukt dan laat ik je wel weten.
Prima, we horen het wel :)
ID van 1 tot en met 2 krijg je "Foei, stout, niet lief! Jij mag niet andermans spulletjes verwijderen." melding en bij ID 3 krijg ik dit te zien "Zonder ID kan ik niks!".
Als kolom ID met sessie ID niet overheen komt dan is deze melding goed "Foei, stout, niet lief! Jij mag niet andermans spulletjes verwijderen.".
---MESSAGE-EDIT---
Ik heb even met excel een plaatje gemaakt om duidelijker te maken.
Rij 1 is USER tabel
Rij 2 is WERKSTUK tabel
Rij 3 is WERKSTUK van ingelogde USER.
Rij 3 heeft WERKSTUKID dat komt in URL balk ?id=2, ?id=4 en ?id=5
Wat ik nu heb is dat alles blokkeerd wordt behalve ingelogde USERID dus ID 3. ?id= verandert naar WERKSTUKID van ingelogde gebruikers.
Gewijzigd op 20/05/2015 16:26:53 door johan de wit
Hoe ziet je code er nu uit?
users:
- userid
- username
werkstukken:
- werkstukid
- userid (zegt dus van welke user dit werkstuk is)
- titel
- etc..
De ingelogde user is gewoon één user uit de tabel users.
Jij was ingelogd met userid 3.
Dan kun je zo de bijbehorende user gegevens zoeken:
en zo zoek je bijbehorende werkstukken:
en zo zoek je beiden in 1 keer:
Code (php)
1
2
3
4
2
3
4
SELECT title, username, ... FROM werkstukken
JOIN users
ON users.userid=werkstukken.userid
WHERE userid=3
JOIN users
ON users.userid=werkstukken.userid
WHERE userid=3
Gewijzigd op 20/05/2015 19:45:48 door Frank Nietbelangrijk
Ik stel voor dat je de verschillende acties die iemand op een werkstuk kan uitvoeren wat verder uit elkaar trekt, want het is nu nogal een clusterf... warboel.
Je geeft zelf ook al aan wat er gebeurt: je kunt alleen info van het werkstuk opvragen indien het user id gelijk is aan het id van het werkstuk.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?PHP
session_start();
if (!(isset($_SESSION['user_login_status']) && $_SESSION['user_login_status'] != '')) {
header ("Location: index.php");
exit; // NA HEADER EEN EXIT EN JE SCRIPT STOPT DAN OOK DAADWERKELIJK
}
// INITIALISATIE ID MET DEFAULTWAARDE 0
$id = 0;
if(isset($_GET['id'])) {
$id = intval($_GET['id']);
}
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
// ALLEEN ROW VAN SESSIES IS TOEGESTAAN
if(isset($id)) {
if($id == $_SESSION['user_id']) {
verwijder_bestand(); // <--- WAT MOET HIER KOMEN?
} else {
echo "Foei, stout, niet lief! Jij mag niet andermans spulletjes verwijderen.";
}
} else {
echo "Zonder ID kan ik niks!";
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=', '', '');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabel SET name=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $_POST['name']);
$stmt->bindParam(2, $_POST['uid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: lijst.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabel WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$username = $row['user_name'];
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
<form id="<?php echo $row["id"]; ?>" action="" method="POST">
<input type="hidden" value="<?php echo $id; ?>" name="mid">
<div class="container">
<div class="panel-heading">
<h3 class="panel-title">Gegevens</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<table class="table">
<tbody>
<tr>
<td>Naam</td>
<td><input class="form-control" type="text" id="formGroupInputSmall" placeholder="Naam"name="username" value="<?php echo $username; ?>"/></td>
</tr>
</tbody>
</table>
<input class="btn btn-default" type="submit" name="submit_btn" value="Bevestigen"/>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
session_start();
if (!(isset($_SESSION['user_login_status']) && $_SESSION['user_login_status'] != '')) {
header ("Location: index.php");
exit; // NA HEADER EEN EXIT EN JE SCRIPT STOPT DAN OOK DAADWERKELIJK
}
// INITIALISATIE ID MET DEFAULTWAARDE 0
$id = 0;
if(isset($_GET['id'])) {
$id = intval($_GET['id']);
}
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
// ALLEEN ROW VAN SESSIES IS TOEGESTAAN
if(isset($id)) {
if($id == $_SESSION['user_id']) {
verwijder_bestand(); // <--- WAT MOET HIER KOMEN?
} else {
echo "Foei, stout, niet lief! Jij mag niet andermans spulletjes verwijderen.";
}
} else {
echo "Zonder ID kan ik niks!";
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=', '', '');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabel SET name=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $_POST['name']);
$stmt->bindParam(2, $_POST['uid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: lijst.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabel WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$username = $row['user_name'];
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
<form id="<?php echo $row["id"]; ?>" action="" method="POST">
<input type="hidden" value="<?php echo $id; ?>" name="mid">
<div class="container">
<div class="panel-heading">
<h3 class="panel-title">Gegevens</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<table class="table">
<tbody>
<tr>
<td>Naam</td>
<td><input class="form-control" type="text" id="formGroupInputSmall" placeholder="Naam"name="username" value="<?php echo $username; ?>"/></td>
</tr>
</tbody>
</table>
<input class="btn btn-default" type="submit" name="submit_btn" value="Bevestigen"/>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
@Frank:
Inderdaad ik heb precies wat je hebt genoteerd:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
users:
- userid
- username
werkstukken:
- werkstukid
- userid (zegt dus van welke user dit werkstuk is)
- titel
- etc..
- userid
- username
werkstukken:
- werkstukid
- userid (zegt dus van welke user dit werkstuk is)
- titel
- etc..
Ik zal even je code uitproberen.
@Thomas:
Na het inloggen kom je homepage in en dan kan je werkstukken uploaden (upload is nog niet gemaakt), naast dat heb je ook pagina om alle aangemaakte rows bekijken en eventueel aanpassen als het nodig is, achter elke row heb ik een button met link die eindigen op .php?id= als je er op klikt dan kan je aangemaakte gegevens bewerken, dat lukt nu wel alleen als je achter .php?id=(cijfers) aanpast dan kan ik bijvoorbeeld jou geuploade bestand met tekstvakken aanpassen, row die nog niet bestaat dus .php?id=10000000 kan je ook bekijken (het is wel leeg) en invullen. Ik hoop dat ik duidelijk kon uitleggen. Als je nog vragen hebt dan zal ik meer dan mij best doen om je vragen te beantwoorden.
Gewijzigd op 20/05/2015 23:55:43 door johan de wit
Kijk eerst of er een ID is ingevoerd, dit kan resulteren in ja en nee, oftewel true of false. Kijk aan de hand van deze waardes wat de volgende stap is.
Probeer het anders eens in een flowchart te tekenen.
Hopelijk lukt het zo, anders zal ik morgen wel een opzetje maken.
Gewijzigd op 21/05/2015 00:51:30 door johan de wit
Anyway...
Regels 32 t/m 36 en 54 t/m 64 moeten tussen regels 20 & 22 komen.
Op regel 23 moet je dan $row['user_id'] gebruiken i.p.v. $_SESSION['user_id']
Al heb je liever dat je op de huidige regel 39 nog controleert of user_id = $_SESSION['user_id'], dan hoef je op regel 23 niet meer het id te controleren, maar of het aantal geselecteerde rijen groter is dan 0.
Op regel 39 moet je ook weer een user_id = $_SESSION['user_id'] in de WHERE er bij zetten. Op regel 43 moet je dan ook controleren of het aantal aangepaste rijen groter is dan 0.
Op regel 24 moet de code die alleen uitgevoerd mag worden wanneer het jouw werkstuk is.
Wat voor dat bestand het grootste deel van het bestand hoort te zijn.
Wanneer je dat hebt gedaan mag je het laten zien, dan kunnen we je waarschijnlijk nog meer tips geven.
Gewijzigd op 21/05/2015 09:48:36 door Dos Moonen