"Verboden" karaketers helpen query om zeep

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George van Baasbank

George van Baasbank

31/03/2014 12:05:55
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
            )"
;
?>


De HTML-code van mijn formulier

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


Uiteraard staat dit gedeelte in een form


George
 
PHP hulp

PHP hulp

22/12/2024 18:18:56
 
- SanThe -

- SanThe -

31/03/2014 12:15:10
Quote Anchor link
Is de query wel beveiligd?
 
Jan terhuijzen

jan terhuijzen

31/03/2014 12:15:19
Quote Anchor link
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.
 
George van Baasbank

George van Baasbank

31/03/2014 12:16:54
Quote Anchor link
Even een eerste reactie: Ik werk met mysqli.
Ik ga nu verder met de twee tips.
 
Ceasar Feijen

Ceasar Feijen

31/03/2014 12:17:23
Quote Anchor link
http://nl3.php.net/mysqli_real_escape_string
Gewijzigd op 31/03/2014 12:18:25 door Ceasar Feijen
 
George van Baasbank

George van Baasbank

31/03/2014 12:27:09
Quote Anchor link
Heb even gekeken en dit gevonden:
(Is dit een juiste syntax?)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$cVoornaam
      = $verbinding->quote($_POST['voornaam']);
?>
 
Ivo P

Ivo P

31/03/2014 12:27:32
Quote Anchor link
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
 
George van Baasbank

George van Baasbank

31/03/2014 12:29:17
Quote Anchor link
De code vor de connectie

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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");
 
Ivo P

Ivo P

31/03/2014 12:31:30
Quote Anchor link
je zult dan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    '$cVoornaam',
?>


en je query moeten aanpassen naar iets als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php

    '". mysqli_real_escape_string($verbinding, $cVoornaam)."',
?>




Toevoeging op 31/03/2014 12:32:21:

en dat uiteraard voor al je velden
 
George van Baasbank

George van Baasbank

31/03/2014 12:32:34
Quote Anchor link
Na een aantal tips heb ik nu dit bedacht:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$cVoornaam
      = $mysqli->real_escape_string($verbinding->quote($_POST['voornaam']));
?>
 
Ivo P

Ivo P

31/03/2014 12:33:51
Quote Anchor link
Wat doet $verbinding->quote()

Zeker aangezien je connectie-code ook een $verbinding staat, die een resource is en geen object
 
- SanThe -

- SanThe -

31/03/2014 12:33:52
Quote Anchor link
Ivo P op 31/03/2014 12:31:30:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php

    '". mysqli_real_escape_string($verbinding, $cVoornaam)."',
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.