phpbar.de logo

Mailinglisten-Archive

[php] Modular - Multiplikation Problem

[php] Modular - Multiplikation Problem

Sebastian Mendel lists at sebastianmendel.de
Mit Nov 25 15:39:46 CET 2009


Am 25.11.2009 14:37, schrieb Thomas Koudela:
> Wenn ich alles richtig verstanden habe kann es richtig ärgerlich
> werden, wenn jemand - wie ich ;-) - auf die Idee kommt ganzzahlige
> Nutzereingaben oder Parameterübergaben, mit
> $zahl = floor($_POST['Eingabe'])
> oder
> $zahl = round($_GET['Parameter'])
> aus Vorsicht gegen SQL-Injections abzusichern.
>
> Wegen "When converting from float to integer, the number will be rounded
> towards zero." und der in diesem Thread besprochenen
> Darstellungsungenauigkeit könnte folgendes passieren:
> - $_GET['DatensatzID'] ist mit '12324' bzw. einer "bösen"
>    Ziffernfolge belegt.
> - "UPDATE `wichtigeDaten`
>    SET `datensatz`='$daten'
>    WHERE `ID`=".floor($_GET['DatensatzID'])." LIMIT 1;";
>    ändert jedoch den Datensatz mit der ID 12323 statt 12324, weil eine
>    interne Typenkonvertierung über String hin zu Integer stattgefunden
>    hat, welche einfach 0.9999999999999...926 abgeschnitten hat.


dafür würde man dann ja auch ein explizites Casting verwenden, also

WHERE `ID`=" . (int) $_GET['DatensatzID'] . "

oder WHERE `ID`=" . int_val($_GET['DatensatzID']) . "

oder "prepared statements"


bei "einer "bösen" Ziffernfolge"

ist die Problematik eh eine andere, du musst ja eh prüfen ob der 
Benutzer diesen Datensatz überhaupt ändern darf.

-- 
Sebastian Mendel

php::bar PHP Wiki   -   Listenarchive