beveiligingsprobleem
Ik moet controleren of je ingelogd bent ( zo niet zou je terug naar de index.php gestuurd moeten worden)
Maar als ik dit test door bv localhost/opdracht/toevoegen.php in de adresbalk in te geven ( waar ik zo niet in zou mogen geraken) kom ik toch op de pagina terecht ( je kan wel geen games toevoegen. enkel menubalk, banner en footer zijn zichtbaar) maar ik word dus niet naar de index.php gestuurd. Kan iemand helpen en zeggen wat ik fout doe?
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
<!DOCTYPE HTML>
<html>
<?php
session_start();
?>
<head>
<link rel="stylesheet" type="text/css" href="opmaak.css">
</head>
<body>
<!-- Banner-->
<header id="header">
<div class="innertube">
<h1>Gamechick1988's Gaming Database </h1>
<img id="logo" src="image.png" alt="logo.png" title="gamertag"/>
</div>
</header>
<!-- Gedeelte vlak onder de header-->
<div id="wrapper">
<main>
<div id="content">
<div id="toevoegen">
<?php
if ((isset($_SESSION["gebruikersnaam"])) AND (isset($_SESSION["wachtwoord"])))
{
//database connectie maken
//variable aanmaken van de server
$servername= "localhost";
$username = "root";
$password = "";
//variable database-naam en tabelnaam
$dbname = "gamingdatabase";
//connectie maken
$conn = mysqli_connect($servername, $username, $password, $dbname);
// connectie controleren
if (!$conn)
{
die("Connectie mislukt:" . mysqli_connect_error());
}
else
{
echo "";
}
$sql2 = "SELECT ID, platform FROM consoles";
$result2 = mysqli_query($conn, $sql2 );
//teller
$i = 1;
if (mysqli_num_rows($result2) > 0)
{
?>
<div id="game">
<h2 style="text-decoration: underline; text-align: center; ";>Een game toevoegen</h2>
<img id ="addgame" src="add.png" alt="add" />
<form action="toegevoegd.php" method="post" >
<table style="color:black; text-align: center;" cellpadding="5">
</br>
<tr>
<td>Titel</td>
<td><input type="text" name="titel" value="Geef de titel in" required style="width: 200px; color: black; " /></td></br>
</tr>
</br>
<tr>
<td>Platform</td>
<td>
<select name="platform" style="width: 200px;color: black;">
<option value="">Selecteer het juiste platform</option>"
<?php
while($row = mysqli_fetch_assoc($result2))
{
echo "<option value=".$row["platform"].">".$row["platform"]."</option>";
$i++;
}
echo "</select>";
?>
</td>
</tr>
<tr>
<td>Genre</td>
<td><input type="text" name="genre" value="Geef het genre in" required style="width: 200px; color: black; " /></td></br>
</tr>
</br>
<tr>
<td>Publisher</td>
<td><input type="text" name="publisher" value="Geef de publisher in" required style="width: 200px; color: black; " /></td></br>
</tr>
</br>
<tr>
<td>Special Edition </td>
<td>
<select name="se" required style="width: 200px; color: black;">
<option value="niet ingevuld">-</option>
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
</td>
</tr>
</br>
<tr>
<td>Finished </td>
<td>
<select name="finished" required style="width: 200px; color: black;">
<option value="niet ingevuld">-</option>
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
</td>
</tr>
</br>
<tr>
<td>Copy </td>
<td>
<select name="copy" required style="width: 200px; color: black;">
<option value="niet ingevuld">-</option>
<option value="digital">Digital copy</option>
<option value="physical">Physical copy</option>
</select>
</td>
</tr>
</br>
</table>
<table>
<tr>
<td colspan="2">
<input type="submit" value="toevoegen" name="toevoegen" />
</td>
</tr>
</table>
</form>
</div>
<?php
//connectie met server sluiten nadat al de data werd opgehaald
mysqli_close($conn);
}
else
{
echo('location: index.php');
}
}
?>
</div>
</div>
</main>
<nav id="nav">
<div class="innertube">
<h3>Mijn collectie</h3>
<ul>
<li><a href="toevoegen.php">Een game toevoegen</a></li>
<li><a href="opvragen.php">Mijn games opvragen</a></li>
<li><a href="verwijderen.php">Een game verwijderen</a></li>
<li><a href="wijzigen.php"> Een game wijzigen </a></li>
<li><a href="consolestoevoegen.php"> Een console toevoegen </a></li>
<li><a href="consolesopvragen.php"> Mijn consoles opvragen </a></li>
<form id="aanmelden" action= "index.php" method="post">
<br>
<label class="logoutLblPos">
<input type= "submit" name="afmelden" id="afmelden" value="Afmelden"/>
</label>
</form>
</ul>
</div>
</nav>
</div>
<footer id="footer">
<div class="innertube">
<a href="index.php"> Loginscherm </a>|<a href="toevoegen.php"> Een game toevoegen </a>|<a href="opvragen.php"> Games opvragen </a>|
<a href="verwijderen.php"> Een game verwijderen </a>|<a href="wijzigen.php"> Een game wijzigen </a>|<a href="consolesopvragen.php"> Mijn consoles opvragen </a>|
<a href="consolestoevoegen.php"> Een console toevoegen </a>|
</div>
</footer>
</body>
</html>
<html>
<?php
session_start();
?>
<head>
<link rel="stylesheet" type="text/css" href="opmaak.css">
</head>
<body>
<!-- Banner-->
<header id="header">
<div class="innertube">
<h1>Gamechick1988's Gaming Database </h1>
<img id="logo" src="image.png" alt="logo.png" title="gamertag"/>
</div>
</header>
<!-- Gedeelte vlak onder de header-->
<div id="wrapper">
<main>
<div id="content">
<div id="toevoegen">
<?php
if ((isset($_SESSION["gebruikersnaam"])) AND (isset($_SESSION["wachtwoord"])))
{
//database connectie maken
//variable aanmaken van de server
$servername= "localhost";
$username = "root";
$password = "";
//variable database-naam en tabelnaam
$dbname = "gamingdatabase";
//connectie maken
$conn = mysqli_connect($servername, $username, $password, $dbname);
// connectie controleren
if (!$conn)
{
die("Connectie mislukt:" . mysqli_connect_error());
}
else
{
echo "";
}
$sql2 = "SELECT ID, platform FROM consoles";
$result2 = mysqli_query($conn, $sql2 );
//teller
$i = 1;
if (mysqli_num_rows($result2) > 0)
{
?>
<div id="game">
<h2 style="text-decoration: underline; text-align: center; ";>Een game toevoegen</h2>
<img id ="addgame" src="add.png" alt="add" />
<form action="toegevoegd.php" method="post" >
<table style="color:black; text-align: center;" cellpadding="5">
</br>
<tr>
<td>Titel</td>
<td><input type="text" name="titel" value="Geef de titel in" required style="width: 200px; color: black; " /></td></br>
</tr>
</br>
<tr>
<td>Platform</td>
<td>
<select name="platform" style="width: 200px;color: black;">
<option value="">Selecteer het juiste platform</option>"
<?php
while($row = mysqli_fetch_assoc($result2))
{
echo "<option value=".$row["platform"].">".$row["platform"]."</option>";
$i++;
}
echo "</select>";
?>
</td>
</tr>
<tr>
<td>Genre</td>
<td><input type="text" name="genre" value="Geef het genre in" required style="width: 200px; color: black; " /></td></br>
</tr>
</br>
<tr>
<td>Publisher</td>
<td><input type="text" name="publisher" value="Geef de publisher in" required style="width: 200px; color: black; " /></td></br>
</tr>
</br>
<tr>
<td>Special Edition </td>
<td>
<select name="se" required style="width: 200px; color: black;">
<option value="niet ingevuld">-</option>
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
</td>
</tr>
</br>
<tr>
<td>Finished </td>
<td>
<select name="finished" required style="width: 200px; color: black;">
<option value="niet ingevuld">-</option>
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
</td>
</tr>
</br>
<tr>
<td>Copy </td>
<td>
<select name="copy" required style="width: 200px; color: black;">
<option value="niet ingevuld">-</option>
<option value="digital">Digital copy</option>
<option value="physical">Physical copy</option>
</select>
</td>
</tr>
</br>
</table>
<table>
<tr>
<td colspan="2">
<input type="submit" value="toevoegen" name="toevoegen" />
</td>
</tr>
</table>
</form>
</div>
<?php
//connectie met server sluiten nadat al de data werd opgehaald
mysqli_close($conn);
}
else
{
echo('location: index.php');
}
}
?>
</div>
</div>
</main>
<nav id="nav">
<div class="innertube">
<h3>Mijn collectie</h3>
<ul>
<li><a href="toevoegen.php">Een game toevoegen</a></li>
<li><a href="opvragen.php">Mijn games opvragen</a></li>
<li><a href="verwijderen.php">Een game verwijderen</a></li>
<li><a href="wijzigen.php"> Een game wijzigen </a></li>
<li><a href="consolestoevoegen.php"> Een console toevoegen </a></li>
<li><a href="consolesopvragen.php"> Mijn consoles opvragen </a></li>
<form id="aanmelden" action= "index.php" method="post">
<br>
<label class="logoutLblPos">
<input type= "submit" name="afmelden" id="afmelden" value="Afmelden"/>
</label>
</form>
</ul>
</div>
</nav>
</div>
<footer id="footer">
<div class="innertube">
<a href="index.php"> Loginscherm </a>|<a href="toevoegen.php"> Een game toevoegen </a>|<a href="opvragen.php"> Games opvragen </a>|
<a href="verwijderen.php"> Een game verwijderen </a>|<a href="wijzigen.php"> Een game wijzigen </a>|<a href="consolesopvragen.php"> Mijn consoles opvragen </a>|
<a href="consolestoevoegen.php"> Een console toevoegen </a>|
</div>
</footer>
</body>
</html>
Je mag session_start() en header() alleen gebruiken als er nog geen output verzonden is. Jij zet boven de session_start() al HTML-code, dit mag dus niet, dit geld ook voor de header().
Als de header() enkel gebruikt mag worden zolang er geen output is, hoe gebruik je deze dan om je terug naar de index.php te sturen als je niet ingelogd bent (aangezien deze code onderaan staat)?
Dan klopt je volgorde dus niet...
Je controleert eerst of iemand ingelogd is. En pas als dat zo is, begin je met het aanbieden van een htmlpagina (in dit geval).
Stel je bent krantenbezorger.
Dan duw je ook niet eerst de krant door de brievenbus, en als die zo'n beetje op de mat ligt, check je of deze bus wel een krant moest hebben. (of een AD ipv een Telegraaf oid)
Dus eerst de controle in php of je iets moet tonen of moet door verwijzen.
En ook de controle WAT je eigenlijk moet tonen (bijvoorbeeld in het geval iemand wel rechten heeft om laten we zeggen orders, te bekijken, maar de lijst leeg is.
In dat geval begin je ook niet een html-lijst, maar een melding dat er niets gevonden is.
Code (php)
Allereerst zou ik altijd && gebruiken in plaats van AND, en || in plaats van OR omdat de AND en OR niet altijd werken zoals je verwacht omdat er iets aan de hand was met de prioriteit van de operanden. Tenzij je precies weet hoe AND en OR precies werken ten opzichte van respectievelijk && en ||: gebruik simpelweg && en || in boolean statements (dat gedoe tussen de haakje van een if-statement).
Ten tweede: dit zorgt voor een enorm grote tangconstructie. Het is beter om het if-statement meteen aan het begin af te wikkelen, zoals @Ivo zegt: nog voordat je de krant door de bus hebt geduwd :p. Als je dit if-statement bent gepasseerd kun je er vanuit gaan dat bepaalde condities gelden, anders was je immers niet langs dit if-statement gekomen. Beschouw deze controle als de waakhond van je script.
En tot slot, deze syntax is verkeerd om twee redenen:
Ten eerste bedoelde je waarschijnlijk header('Location: index.php'); en ten tweede moeten dit soort headers altijd gevolgd worden door een exit-statement omdat de daaropvolgende code anders niet goed beschermd is want header('Location: ...') transporteert je niet direct automagisch naar de nieuwe locatie. Dit is een misvatting die er beter in een heel vroeg stadium uitgestampt zou moeten worden :).
Wat je dus aan het begin van je script zet, nog voor je <!DOCTYPE> is zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
session_start(); // begin een sessie of zet een sessie voort
if (empty($_SESSION['gebruikersnaam']) || empty($_SESSION['wachtwoord'])) {
// een van de twee is leeg, verkassen maar
header('Location: index.php');
exit; // stopt verdere executie van het script
}
// Als we dit punt bereiken geldt dat zowel gebruikersnaam en wachtwoord in de sessie niet leeg zijn.
// Dit is in wezen de "ontkenning" van het vorige if-statement en dus in feite zitten we nu in het
// onzichtbare "else" deel van het if-statement. Dit scheelt je weer inspring in je code
// en een ogenschijnlijk verdwaalde sluit-accolade ~200 regels verderop.
?>
session_start(); // begin een sessie of zet een sessie voort
if (empty($_SESSION['gebruikersnaam']) || empty($_SESSION['wachtwoord'])) {
// een van de twee is leeg, verkassen maar
header('Location: index.php');
exit; // stopt verdere executie van het script
}
// Als we dit punt bereiken geldt dat zowel gebruikersnaam en wachtwoord in de sessie niet leeg zijn.
// Dit is in wezen de "ontkenning" van het vorige if-statement en dus in feite zitten we nu in het
// onzichtbare "else" deel van het if-statement. Dit scheelt je weer inspring in je code
// en een ogenschijnlijk verdwaalde sluit-accolade ~200 regels verderop.
?>
Wat natuurlijk ook een beetje raar is dat deze informatie (met name het wachtwoord) gepropageerd wordt in de sessie. Deze informatie heb je eigenlijk alleen maar nodig in de authenticatie-stap. En dan, als vastgesteld is wie je bent houd je dit bij in je sessie.
En dan wederom wat @Ivo zei: doorgaans is het niet zo belangrijk wie je bent (tenzij je applicatie iedereen toelaat die kan inloggen) maar meer wat voor rechten je hebt en dus wat voor acties je mag uitvoeren binnen de applicatie.
Gewijzigd op 28/02/2017 20:47:04 door Thomas van den Heuvel
in het midden van mijn code verwijderen of mag dit blijven staan? Want als er geen gebruikersnaam en wachtwoord gevonden wordt, kom je er niet in
Dat kun je er gerust uithalen, want de inverse is bovenaan al gecontroleerd, en als een of beide leeg zijn gaat het script niet verder.