Veilig en correcte verwerking
Alvast bedankt
Groet,
Michael
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
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
<?php
session_start();
$_SESSION['n_title'] = $_POST['n_title'];
$_SESSION['n_content'] = $_POST['n_content'];
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(!isset($_POST['n_title']) || empty($_POST['n_title'])) {
$TitleError = 'Titel mag niet leeg zijn';
} elseif(strlen($_POST['n_title']) < 4) {
$TitleError = 'Titel moet minimaal 4 letters lang zijn';
}
if(!isset($_POST['n_content']) || empty($_POST['n_content'])){
$ContentError = 'Bericht mag niet leeg zijn';
}
if(empty($TitleError) && empty($ContentError)) {
$sql = mysql_query
("
INSERT INTO news (n_title, n_content)
VALUE('".mysql_real_escape_string($_POST['n_title'])."', '".mysql_real_escape_string($_POST['n_content'])."')
");
if($sql) {
$succes = 'Nieuwsartikel toegevoegd';
header('Refresh: 3; url=/admin/news/');
} else {
echo 'Er is een fout opgetreden bij de query';
echo mysql_error();
}
}
}
?>
<div id="main">
<h1>Nieuw nieuwsartikel</h1>
<div class="content">
<form action="" method="POST">
<div class="input_row">
<label for="n_title">Titel *</label>
<input type="text" class="input" id="n_title" name="n_title" value="<?php echo $_SESSION['n_title']; ?>" />
<?php echo $TitleError; ?>
</div>
<div class="input_row">
<label for="n_content">Bericht *</label>
<input type="text" class="input" id="n_content" name="n_content" value="<?php echo $_SESSION['n_content']; ?>" />
<?php echo $ContentError; ?>
</div>
<input type="submit" class="button green" value="Toevoegen" />
</form>
</div>
</div>
session_start();
$_SESSION['n_title'] = $_POST['n_title'];
$_SESSION['n_content'] = $_POST['n_content'];
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(!isset($_POST['n_title']) || empty($_POST['n_title'])) {
$TitleError = 'Titel mag niet leeg zijn';
} elseif(strlen($_POST['n_title']) < 4) {
$TitleError = 'Titel moet minimaal 4 letters lang zijn';
}
if(!isset($_POST['n_content']) || empty($_POST['n_content'])){
$ContentError = 'Bericht mag niet leeg zijn';
}
if(empty($TitleError) && empty($ContentError)) {
$sql = mysql_query
("
INSERT INTO news (n_title, n_content)
VALUE('".mysql_real_escape_string($_POST['n_title'])."', '".mysql_real_escape_string($_POST['n_content'])."')
");
if($sql) {
$succes = 'Nieuwsartikel toegevoegd';
header('Refresh: 3; url=/admin/news/');
} else {
echo 'Er is een fout opgetreden bij de query';
echo mysql_error();
}
}
}
?>
<div id="main">
<h1>Nieuw nieuwsartikel</h1>
<div class="content">
<form action="" method="POST">
<div class="input_row">
<label for="n_title">Titel *</label>
<input type="text" class="input" id="n_title" name="n_title" value="<?php echo $_SESSION['n_title']; ?>" />
<?php echo $TitleError; ?>
</div>
<div class="input_row">
<label for="n_content">Bericht *</label>
<input type="text" class="input" id="n_content" name="n_content" value="<?php echo $_SESSION['n_content']; ?>" />
<?php echo $ContentError; ?>
</div>
<input type="submit" class="button green" value="Toevoegen" />
</form>
</div>
</div>
Bewerkt:
Script tussen code-tags geplaatst. Gelieve dit voortaan zelf te doen.
Gewijzigd op 22/08/2013 12:58:56 door - Ariën -
Je kan dit doen:
Code (php)
1
2
3
4
2
3
4
<?php
$_SESSION['n_title'] = isset($_POST['n_title']) ? $_POST['n_title'] : '';
...
?>
$_SESSION['n_title'] = isset($_POST['n_title']) ? $_POST['n_title'] : '';
...
?>
Google "ternary operator" voor meer info
Gewijzigd op 21/08/2013 17:26:29 door Kris Peeters
Misschien ook slim om de switch te maken naar mysqli aangezien de meeste functies in php 5.5 deprecated zullen zijn.
Gewijzigd op 21/08/2013 17:30:37 door Chris PHP
Toch nog een vraagje. Is isset() en empty() beide nodig, of is 1 van de twee ook voldoende?
Is het script verder wel "veilig"?
isset() voldoende, eigenlijk de vervanger van empty()
isset() kijkt of de variabel geset is en niet null is.
In principe is isset() kijkt of de variabel geset is en niet null is.
Gewijzigd op 21/08/2013 17:41:36 door Chris PHP
if(isset($_POST['n_title']) && !empty($_POST['n_title'])) {
is het zelfde als
if(!empty($_POST['n_title'])) {
Omdat empty intern zelf een isset check doet.
De vraag is dus: "Is het relevant om een empty() te doen, of volstaat isset()".
Noteer daarbij dat empty een true geeft voor waarden als 0, of ''.
Over het algemeen kan je dus beter isset() controleren; en niet empty()
Chris NVT op 21/08/2013 17:40:13:
Zie je dit vaker zeggen, maar ben toch een voorstander van empty tegenover isset. In empty ZIT ISSET AL, het rekent false, nul (integer), null en een lege string als negatief resultaat.
Door empty te gebruiken impliceer je dat 0 absoluut niet kan gebruikt worden als waarde.
Meestal is dat ook wel het geval.
Een username, password, e-mail, telefoonnummer ... kunnen nooit de waarde 0 hebben (of ge hebt een heel erg vreemd beleid op je site).
Dus daar kan je zonder probleem empty gebruiken.
---
Als je een index stuurt - bij voorbeeld met radio button of select - waar je dus zegt: het "zoveelse element" is gekozen, gebruik je isset. (want 0 kan een geldige waarde zijn)
---
Met getallen maakt het weinig uit, in volgende context:
Dit is dezelfde als de $_POST waarde, als ik html of javascript invoer zou dat dus gewoon uitgevoerd worden. Niet veilig dus.
Probeer je zelf aan te leren alles wat je op het scherm wilt hebben goed te escapen.
Maak er van en dat probleem is ook opgelost ;).
Thanks voor de tip iedereen :)
De keuze is persoonlijk ik ga liever voor isset jij voor emtpy, feit is dat dubbele checks met isset en empty nooit nodig is. En of je nu isset gebruikt of empty tja dat is een keuze die je zelf maakt beide zijn goed.