"Verboden" karaketers helpen query om zeep
Ik zit met het volgende probleem:
Op mijn site kunnen bezoekers naast hun gegevens ook stukjes tekst invoegen bij een sollicitatie. Nu is het vaak zo dat deze bezoekers ook, voor mij, ongewenste karakters gebruiken zoals een single-quote of een dubbel-quote waardoor mijn query niet goed wordt uitgevoerd. Deze quotes worden gezien als het einde van de query.
Ik heb alles in zgn. UTF-8 staan dus, lijkt mij, kan dat niet de oorzaak zijn.
Op dit moment heb ik een paardenmiddel gebruikt om alle ongewenste karakters om te zetten in een underscore maar dat kan niet de bedoeling zijn.
Heeft iemand een suggestie hoe ik dit netjes kan verhelpen?
De query:
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
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
<?php
$sql = "INSERT INTO
pod__profiel
(
voornaam,
tussenvoeg,
achternaam,
adres,
postcode,
woonplaats,
telefoon,
email,
geslacht,
geboortedatum,
auditie,
ervaring, // Hier gaat het veelal mis
toelichting, // Hier gaat het veelal mis
pasfoto,
id_ktzijde,
datum,
zoekcode,
instrument,
stemsoort,
dans,
opleiding,
gewijzigd_door,
gewijzigd_op,
wijziging
)
VALUES
(
'$cVoornaam',
'$cTussenvoeg',
'$cAchternaam',
'$cAdres',
'$cPostcode',
'$cWoonplaats',
'$cTelefoon',
'$cEmail',
'$cGeslacht',
'$dGebDatum',
'$cAuditie',
'$cErvaring',
'$cToelichting',
'$cPasfoto',
'$cRelatiecode',
NOW(),
'$cZoekcode',
'$cInstrument',
'$cStemsoort',
'$cDans',
'$cOpleiding',
'$cIemand',
NOW(),
1
)";
?>
$sql = "INSERT INTO
pod__profiel
(
voornaam,
tussenvoeg,
achternaam,
adres,
postcode,
woonplaats,
telefoon,
email,
geslacht,
geboortedatum,
auditie,
ervaring, // Hier gaat het veelal mis
toelichting, // Hier gaat het veelal mis
pasfoto,
id_ktzijde,
datum,
zoekcode,
instrument,
stemsoort,
dans,
opleiding,
gewijzigd_door,
gewijzigd_op,
wijziging
)
VALUES
(
'$cVoornaam',
'$cTussenvoeg',
'$cAchternaam',
'$cAdres',
'$cPostcode',
'$cWoonplaats',
'$cTelefoon',
'$cEmail',
'$cGeslacht',
'$dGebDatum',
'$cAuditie',
'$cErvaring',
'$cToelichting',
'$cPasfoto',
'$cRelatiecode',
NOW(),
'$cZoekcode',
'$cInstrument',
'$cStemsoort',
'$cDans',
'$cOpleiding',
'$cIemand',
NOW(),
1
)";
?>
De HTML-code van mijn formulier
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<tr>
<td class="kolom1">Ervaring : <sup>*</sup></td>
<td class="kolom2"><textarea name="ervaring" placeholder="Je ervaringen"><?php echo $cErvaring ; ?></textarea></td>
</tr>
<tr>
<td class="kolom1">Evt. toelichting :</td>
<td class="kolom2"><textarea name="toelichting" placeholder="Eventuele toelichting"><?php echo $cToelichting ; ?></textarea></td>
</tr>
<td class="kolom1">Ervaring : <sup>*</sup></td>
<td class="kolom2"><textarea name="ervaring" placeholder="Je ervaringen"><?php echo $cErvaring ; ?></textarea></td>
</tr>
<tr>
<td class="kolom1">Evt. toelichting :</td>
<td class="kolom2"><textarea name="toelichting" placeholder="Eventuele toelichting"><?php echo $cToelichting ; ?></textarea></td>
</tr>
Uiteraard staat dit gedeelte in een form
George
Is de query wel beveiligd?
Een van de eerste dingen die je leert bij het gebruik van SQL is dat je de input moet filteren.
Kijk eens naar de PDO quote functie. Waarschijnlijk gebruik je nog de mysql functies. Als je deze verouderde functies toch wil blijven gebruiken, filter dan op zijn minst de input met mysql_real_escape_string($input);
http://nl3.php.net/manual/en/function.mysql-real-escape-string.php
Maar zoals ik al zij, het is verouderd.
Ik ga nu verder met de twee tips.
http://nl3.php.net/mysqli_real_escape_string
Gewijzigd op 31/03/2014 12:18:25 door Ceasar Feijen
(Is dit een juiste syntax?)
Zeker als je met persoonlijke gegevens werkt, is enige beveiliging van je data wel gewenst:
http://wiki.pfz.nl/sqlinjectie
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$verbinding = mysqli_connect("Host","gebruiker","wachtwoord","database");
// Check connection
if (mysqli_connect_errno($verbinding)) {
$cErrorTekst = "Geen verbinding met SQL-database. Foutnummer: " . mysqli_connect_error();
header("Location: error.php?error=993");
exit();
}
mysqli_set_charset($verbinding,"utf8");
$verbinding = mysqli_connect("Host","gebruiker","wachtwoord","database");
// Check connection
if (mysqli_connect_errno($verbinding)) {
$cErrorTekst = "Geen verbinding met SQL-database. Foutnummer: " . mysqli_connect_error();
header("Location: error.php?error=993");
exit();
}
mysqli_set_charset($verbinding,"utf8");
en je query moeten aanpassen naar iets als
Toevoeging op 31/03/2014 12:32:21:
en dat uiteraard voor al je velden
Zeker aangezien je connectie-code ook een $verbinding staat, die een resource is en geen object