waarom een fout

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Berta Pappens

Berta Pappens

27/08/2022 15:13:45
Quote Anchor link
Ik lees via een ander bestand de provincie uit van een land en ik wil die updaten in een ander bestand

De provincie is : Provence-Alpes-Côte d'Azur

$up = mysqli_query($con,"update database_prov set provincie = '$prov' where Code = '$weg' ");

Ik weet niet meer hoe ik dit moet oplossen maar weet wel dat het met het accent te maken heeft van D'Azur.

Kan iemand helpen AUB.

Dank U
 
PHP hulp

PHP hulp

25/04/2024 09:28:35
 
- Ariën  -
Beheerder

- Ariën -

27/08/2022 15:41:59
Quote Anchor link
Gebruik mysqli_real_escape_string(..) om je variabelen $prov en $weg, en verdiep je in SQL-injection.
 
Berta Pappens

Berta Pappens

27/08/2022 15:55:05
Quote Anchor link
Kan je het even verduidelijken ben nog niet mee .
$mysqli->real_escape_string($prov);

Krijg daar ook een fout op
 
- Ariën  -
Beheerder

- Ariën -

27/08/2022 16:22:51
Quote Anchor link
Wat voor fout?
 
Ivo P

Ivo P

27/08/2022 18:55:54
Quote Anchor link
probleem is je ' in de naam van de provincie.
Daardoor wordt je query:

"update database_prov set provincie = 'Provence-Alpes-Côte d'Azur' where Code = '1234' "

Mysql raakt nu in de war: want na die d (van d'Azur) denkt mysql dat je value eindigt. Maar wat doet die Azur daar dan?

De oplossing daarvoor is, dat er een \ komt voor tekens die als onderdeel van de value gezien moeten worden en dus niet het einde aangeven:


"update database_prov set provincie = 'Provence-Alpes-Côte d\'Azur' where Code = '1234' "

Dat verzorgt de genoemde escape functie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$prov
= "Provence-Alpes-Côte d'Azur";

$prov_escaped = mysqli_real_escape_string($con, $prov);

$up = mysqli_query($con,"update database_prov set provincie = '$prov_escaped' where Code = '$weg' ");

?>


(en ook voor $weg als dat niet een nummer is.)
 
Berta Pappens

Berta Pappens

27/08/2022 19:50:51
Quote Anchor link
Ivo,

Hartelijk dank voor uw duidelijke uitleg.
Dit heeft mij geholpen, en alles werkt perfect.

Nogmaals hartelijk dank daarvoor
 
Ivo P

Ivo P

27/08/2022 20:37:13
Quote Anchor link
En deze functie moet je dus altijd toepassen. Je hebt nu te maken met een onschuldige variant die alleen maar je query kapot maakt en dit dus laat mislukken.
JE hebt nu geluk dat je dit bij het testen of ontwikkelen tegenkomt. Maar test je alleen met de regio Bordeaux en Paris, dan zit daar dit teken niet in en gaat alles toevallig goed.

Minder leuk wordt het als je iemand treft die dit bewust uit laat voeren door behalve die ' ook nog zorgt dat je query verder in orde blijft maar gelijktijdig onbedoelde bijeffecten heeft

https://imgs.xkcd.com/comics/exploits_of_a_mom.png
 
Ad Fundum

Ad Fundum

29/08/2022 15:20:12
Quote Anchor link
Dit gaat echt ontzettend vaak fout in software. SQL injectie is bijna nummer 1 in de wereldwijde lijst van 25 meest voorkomende kwetsbaarheden. Terwijl het toch zo ontzettend simpel is te verhelpen: gebruik in vredesnaam prepared statements!.

Op PHPHulp is er een handig script te vinden. Ook is er een handzame tutorial geschreven. Ook wereldwijd er is ar aandacht voor bij de OWASP Foundation.

Waarom blijft het dan lastig om het simpelweg goed te programmeren?
 



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.