"Verboden" karaketers helpen query om zeep
Hallo allemaal,
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:
De HTML-code van mijn formulier
Uiteraard staat dit gedeelte in een form
George
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?
Dat is dus echt gevaarlijk he.
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.
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.
Even een eerste reactie: Ik werk met mysqli.
Ik ga nu verder met de twee tips.
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
Heb even gekeken en dit gevonden:
(Is dit een juiste syntax?)
(Is dit een juiste syntax?)
en los van dat je query nu mislukt: het kan ook zijn dat je query wél lukt maar dan met een paar onbedoelde bij-effecten.
Zeker als je met persoonlijke gegevens werkt, is enige beveiliging van je data wel gewenst:
http://wiki.pfz.nl/sqlinjectie
Zeker als je met persoonlijke gegevens werkt, is enige beveiliging van je data wel gewenst:
http://wiki.pfz.nl/sqlinjectie
De code vor de connectie
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");
je zult dan
en je query moeten aanpassen naar iets als
Toevoeging op 31/03/2014 12:32:21:
en dat uiteraard voor al je velden
en je query moeten aanpassen naar iets als
Toevoeging op 31/03/2014 12:32:21:
en dat uiteraard voor al je velden
Na een aantal tips heb ik nu dit bedacht:
Wat doet $verbinding->quote()
Zeker aangezien je connectie-code ook een $verbinding staat, die een resource is en geen object
Zeker aangezien je connectie-code ook een $verbinding staat, die een resource is en geen object




