@msicaron: je hebt gelijk, ik moet eventjes weer opzoeken hoe ik bij die server kom; was gisteren 1.00 voor ik naar bed ging en vanochtend ook vroeg: vanavond heb ik misschien een gaatje om ff uit te zoeken en te uploaden.

je kan ook tijdelijk de URL van die verkleinde versie als avatar gebruiken hé

zou kunnen ware het niet dat ik in het verleden nogal wat persoonlijke ellende met uploadarchief gehad heb

Op 11 juni 2009 13:44:42 schreef High met Henk:
[...]

dit noemen ze ook wel code injectie.. Je bent wel heel erg dom bezig als je dat dan net NIET af weet te vangen....

Idd, niet slim en eigen schuld. Het is eenvoudig om te kijken naar de inhoud van een file. Als die check er niet in zat dan vrees ik voor de database ;)

met dingen zoals


' OR '1' = '1';---

Om in te loggen :P

En om dan te bedenken dat de sitejes die ik vroega (3jaar geleden) maakte hier nog gevoelig voor waren :P Tsjah, iedereen leert zo elke dag wel weer wat nieuws :P
Werk nu sinds een aantal maanden met PDO, nu nog de rest van mijn collega's er van overtuigen dat ze beter prepared statements kunnen gaan gebruiken, ze zien het nut wel, maar zijn te lui om aan te passen :P

htmlentities
addslashes

en al die voorgedefineerde functies maken het ZOOO makkelijk in PHP. Feitelijk zijn het gewoon strstr functies natuurlijk...

addslashes is plain wrong, dat wil je niet.

Je wilt de gesubmitte data zo authentiek mogelijk in de database opslaan, dus een < sla je niet op als &lt maar gewoon als een < net zoals ' \ and what not.

Dan krijg je per *output type* ook geen problemen dat je dingen van naar naar via moet converteren om de juiste output te krijgen.

Geldt dus ook voor htmlentities. Die wil je pas gebruiken bij het daadwerkelijk weer outputten van je html code.

Wat je echt wilt zijn prepared statements.

Dus gewoon (als voorbeeld zijn ook andere manieren uiteraard) :


$pdo = new PDO();
$pdo->connect(/*gegevens*/);


$query = "SELECT * FROM testbl WHERE col = :col";
$param = array(":col" => $_GET["userinput"]);

$pdo->prepare($query);
$pdo->execute($param);

Wat betreft user output (slashes/htmlentities) dit wil je dus pas in je template file voor je HTML pagina plaatsen.

dus ipv:


$query = "INSERT INTO tbl VALUES('".htmlentities(addslashes(userdata))."')"

doe je (smarty template engine):


{foreach from=$result item=row}
<p>{$row->colname|htmlentities}</p>
{/foreach}

Zodat je usersubmittedvalues gewoon dat is wat hij gesubmit heeft en pas in je uitvoer pas je de data aan zoals je het wilt weergeven.

Enfin, lekker aan het afdwalen weer :P

Oh en de reden daarvoor is bijvoorbeeld als je RSS toe wilt voegen, die kunnen vaak niet overweg met addslashes enzo, dus dan moet je daar ook weer terug gaan removeslashes-en. Maar vaak wordt gewoon gedumpt naar een RSS creator en die unslashed niet. dan krijg je dus een RSS bestand die er dan zo uit ziet:

hallo, \"dit is een quote\" en \'t is ook niet echt leesbaar.

[Bericht gewijzigd door Daan Timmer op (13%)]

ik gaf alleen maar aan dat er voorgedefinieerde functies zijn: er zijn redenen waarom je wel add slashes wilt gebruiken en NIET het op wilt slaan als een karakter: bijv als je WEL een query input wilt hebben ergens...

Die snap ik even niet?

Leuk voor phpfreakz, maar hier wordt het toch wel erg offtopic.

En dan meen ik ooit begrepen te hebben dat je als TS om een slotje mag verzoeken?

In dat geval: Jeroen heeft het begrepen, het staat op de lijst, ik zou zeggen: kom maar op met dat slot! :)