Kan dit stukje code beveiligingsproblemen opleveren? En zo ja, welke?

foreach ($_POST as $index => $value) { ${$index} = $value; }
Je moet weten dat iedereen post en get variabelen kan uploaden naar je server. Al deze variabelen moet je daarom zien als vervuild. Controleer dus zoveel mogelijk op wat wel en niet mag zoals numeriek of niet en escape de tekst alvorens deze in de database op te slaan
Het idee in dit geval is voor het afhandelen van formulieren.

<input name="testvar" />

--> POST -->

foreach ($_POST as $index => $value) { ${$index} = $value; }

..

vanaf hier kan je dan $testvar aanroepen voor gebruik
Het enigste dat je laat zien is het kopiëren van een aantal variabelen. Daar zit geen risico aa
zou je even moeten checken voor de zekerheid met het gebruik van rare key's zoals exit() en die() etc.. waarom niet in een array stoppen? dan kun je de key bijv htmlentities() onschadelijk maken, evenals overzichtelijker opslaan :)
<?php
$exit = 'die()';
?>

Is niets mis mee hoor.
Gooi het allen niet door een eval().
Want dan wordt $iets = 'exec("format c: /u"); wel vervelend ;)
<input name="exit('die');" value="maaktnietuit" />

foreach ($_POST as $index => $value) { ${$index} = $value; }

${exit('die')};

[edit]type attribuut is client side, name attribuut word verzonden naar de server als index binnen de $_POST (én $_REQUEST) global[/edit]
gehehe

oplossing: in array stoppen, niet laten parsen door php.

<?php
$safe = array();
foreach ($_POST as $key => $value) {
$key = htmlentities($key);
if (!is_array($value) && !is_numeric($value)) {
$value = htmlentities($value);
}
$safe[$key] = $value;
}
?>
Ohes ohes op 10/08/2013 19:57:15

Het idee in dit geval is voor het afhandelen van formulieren.


vanaf hier kan je dan $testvar aanroepen voor gebruik

Lijkt mij onveilig:
Waar is de controle of variabelen ingevuld zijn?
Waar is de controle of de variabelen aan bepaalde vereisten voldoen?
Waar is de beveiliging als je een variabele wilt gebruiken in een query en/of een echo?
Chris - op 11/08/2013 12:18:28

<input type="exit('die');" value="maaktnietuit" />

foreach ($_POST as $index => $value) { ${$index} = $value; }

${exit('die')};

beetje offtopic, maar een type attribuut wordt toch niet de index in de $_POST array?

Reageren