SQL, XSS Injection
Dank je Eddy, ik zal dat zeker overwegen. Maar de veiligheid is momenteel mijn prioriteit.
- je kopieert een heleboel variabelen, dit vertroebelt de leesbaarheid; hoe simpeler een script, hoe overzichtelijker (en daarmee veiliger) deze meestal is
- het is beter om dit te doen:
in plaats van dit:
Omdat een ontkenning van "niet goede situatie" niet per definitie een "goede situatie" impliceert.
concreet in jouw geval:
En dus niet andersom.
Thomas van den Heuvel op 05/09/2015 20:58:24:
- je kopieert een heleboel variabelen, dit vertroebelt de leesbaarheid; hoe simpeler een script, hoe overzichtelijker (en daarmee veiliger) deze meestal is
Bedoel je met het kopiëren van variabelen dit:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$fname = @$_POST['fname'];
$lname = @$_POST['lname'];
$uname = @$_POST['uname'];
$email = @$_POST['email'];
$password = @$_POST['password'];
$checkbox = @$_POST['checkbox'];
?>
$fname = @$_POST['fname'];
$lname = @$_POST['lname'];
$uname = @$_POST['uname'];
$email = @$_POST['email'];
$password = @$_POST['password'];
$checkbox = @$_POST['checkbox'];
?>
Moet ik dat dan weghalen en overal dit doen:
Code (php)
En wat character encoding betreft: ik weet eigenlijk niet zo goed wat je ermee bedoelt aangezien ik niet super veel van php ken.
Toevoeging op 07/09/2015 18:17:35:
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
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
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$fname = @$_POST['fname'];
$lname = @$_POST['lname'];
$uname = @$_POST['uname'];
$email = @$_POST['email'];
$password = @$_POST['password'];
$checkbox = @$_POST['checkbox'];
$errors = array();
if(trim($fname)=='') {
$errors[] = 'U moet uw voornaam invullen';
}
if(trim($lname)=='') {
$errors[] = 'U moet uw achternaam invullen';
}
if(trim($uname)=='') {
$errors[] = 'U moet uw gebruikersnaam invullen';
}
if(trim($email)=='') {
$errors[] = 'U moet uw email invullen';
}
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
} else {
$errors[] = 'U moet een geldig emailadres invullen';
}
if(trim($password)=='') {
$errors[] = 'U moet uw wachtwoord invullen';
} else {
$password = password_hash($password, PASSWORD_DEFAULT);
}
if(!isset($checkbox)) {
$errors[] = 'U moet de richtlijnen accepteren';
}
if (count($errors) == 0) {
$sql = "INSERT INTO users (
id, fname, lname, uname, email, password
) VALUES (
'', '" . mysqli_real_escape_string($connection, $fname) . "', '" . mysqli_real_escape_string($connection, $lname) . "', '" . mysqli_real_escape_string($connection, $uname) . "', '" . mysqli_real_escape_string($connection, $email) . "', '" . mysqli_real_escape_string($connection, $password) . "'
)";
if(mysqli_query($connection, $sql)) {
echo 'Succes!';
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($connection);
}
} else {
$err = true;
}
}
?>
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$fname = @$_POST['fname'];
$lname = @$_POST['lname'];
$uname = @$_POST['uname'];
$email = @$_POST['email'];
$password = @$_POST['password'];
$checkbox = @$_POST['checkbox'];
$errors = array();
if(trim($fname)=='') {
$errors[] = 'U moet uw voornaam invullen';
}
if(trim($lname)=='') {
$errors[] = 'U moet uw achternaam invullen';
}
if(trim($uname)=='') {
$errors[] = 'U moet uw gebruikersnaam invullen';
}
if(trim($email)=='') {
$errors[] = 'U moet uw email invullen';
}
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
} else {
$errors[] = 'U moet een geldig emailadres invullen';
}
if(trim($password)=='') {
$errors[] = 'U moet uw wachtwoord invullen';
} else {
$password = password_hash($password, PASSWORD_DEFAULT);
}
if(!isset($checkbox)) {
$errors[] = 'U moet de richtlijnen accepteren';
}
if (count($errors) == 0) {
$sql = "INSERT INTO users (
id, fname, lname, uname, email, password
) VALUES (
'', '" . mysqli_real_escape_string($connection, $fname) . "', '" . mysqli_real_escape_string($connection, $lname) . "', '" . mysqli_real_escape_string($connection, $uname) . "', '" . mysqli_real_escape_string($connection, $email) . "', '" . mysqli_real_escape_string($connection, $password) . "'
)";
if(mysqli_query($connection, $sql)) {
echo 'Succes!';
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($connection);
}
} else {
$err = true;
}
}
?>
Gewijzigd op 07/09/2015 18:15:35 door John De Zon
De karakter-encoding houdt in welke tekenreeks-encoding je gebruikt. Dit is vaak UTF-8, maar oudere scripts gebruiken vaak ISO-8859-1.
Zie ook: http://www.pfz.nl/wiki/charactersets/
Code is in mijn vorige post ook geüpdatet.
Wat kan ik nog aan deze code verbeteren?
Alvast bedankt voor alle hulp!
En zat er al data in deze tabellen? Die data wordt nu niet meer goed ge-encodeerd opgehaald omdat je je connectie-charset hebt veranderd.
Toevoeging op 07/09/2015 21:29:32:
Zijn er nog dingen die ik moet verbeteren of mag ik deze code veilig noemen?
bump
Maar gooi het eens (in een afgeschermde omgeving) online en ga eens testen wat voor rottigheid je kan uitvoeren.