waarom een fout
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
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
Gebruik mysqli_real_escape_string(..) om je variabelen $prov en $weg, en verdiep je in SQL-injection.
Kan je het even verduidelijken ben nog niet mee .
$mysqli->real_escape_string($prov);
Krijg daar ook een fout op
$mysqli->real_escape_string($prov);
Krijg daar ook een fout op
Wat voor fout?
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:
(en ook voor $weg als dat niet een nummer is.)
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)
1
2
3
4
5
6
7
8
9
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' ");
?>
$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.)
Ivo,
Hartelijk dank voor uw duidelijke uitleg.
Dit heeft mij geholpen, en alles werkt perfect.
Nogmaals hartelijk dank daarvoor
Hartelijk dank voor uw duidelijke uitleg.
Dit heeft mij geholpen, en alles werkt perfect.
Nogmaals hartelijk dank daarvoor
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
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
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?
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?




