Overflow aritmetico
Non è possibile avere overflow aritmetici in PHP, almeno non nel senso che il numero si avvolge, portando a un risultato inferiore al previsto (che è il tipo che potrebbe avere implicazioni sulla sicurezza).
Ci sono due ragioni per questo:
- se un numero intero viene aumentato oltre il limite, viene automaticamente convertito in float.
- se un float viene aumentato oltre il limite, viene automaticamente impostato su INF, che viene considerato come il valore più grande.
Puoi provare tu stesso:
$max = PHP_INT_MAX;
var_dump($max); // int 9223372036854775807
$max = PHP_INT_MAX + 1;
var_dump($max); // float 9.2233720368548E+18
$max_float = 1.8e307;
var_dump($max_float); // float 1.8E+307
$max_float = 1.8e307 * 10;
var_dump($max_float); // float INF
Funziona allo stesso modo per i numeri negativi.
Ma anche se non si dispone di un overflow di interi in senso tradizionale, si potrebbero comunque incontrare problemi. Considera, ad esempio, questi casi:
PHP_INT_MAX < (PHP_INT_MAX + 1) // -> false
PHP_INT_MAX == (PHP_INT_MAX + 1) // -> true
Aritmetico Underflow
Puoi avere underflow in PHP:
$min_float = 9.8813129168249E-324;
var_dump($min_float); // float 9.8813129168249E-324
$min_float = 9.8813129168249E-324 / 10;
var_dump($min_float); // float 0
Come 0
è uguale a un numero di cose, tra cui NULL
, false
, "0"
, "foobar"
, questo potrebbe causare problemi in alcune situazioni. Ma questi problemi non sono in realtà il risultato del underflow.
Overflow del buffer
Il buffer overflow in PHP può esistere a causa di vulnerabilità in PHP stesso, ma non a causa del codice dell'applicazione.
Ecco un elenco di alcuni vulnerabilità di buffer overflow in PHP .