¿Qué es un ejemplo de desbordamientos aritméticos y de búfer en una aplicación php?

4

Estoy tratando de encontrar evidencia de si es posible tener desbordamientos en una aplicación php, ya sea desbordamientos de búfer o desbordamientos aritméticos.

Creo que es posible tener estos desbordamientos en el software central de PHP, pero esta pregunta es sobre desbordamientos en una aplicación escrita en php.

    
pregunta greggles 21.03.2016 - 20:23
fuente

1 respuesta

10

Desbordamiento aritmético

No puede tener desbordamientos aritméticos en PHP, al menos no en el sentido de que el número se ajusta, lo que lleva a un resultado menor que el esperado (que es el tipo que puede tener implicaciones de seguridad).

Hay dos razones para esto:

  • si un entero se incrementa por encima de su límite, se convierte automáticamente a flotante.
  • si un flotador se incrementa por encima de su límite, se establece automáticamente en INF, que se trata como el valor más grande.

Puedes intentarlo tú mismo:

$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

Funciona de la misma manera para números negativos.

Pero a pesar de que no tiene un desbordamiento de enteros en el sentido tradicional, todavía puede tener problemas. Considere, por ejemplo, estos casos:

PHP_INT_MAX < (PHP_INT_MAX + 1) // -> false
PHP_INT_MAX == (PHP_INT_MAX + 1) // -> true

Desbordamiento aritmético

Puedes tener subflujos en 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

Como 0 es igual a un número de cosas, entre ellas NULL , false , "0" , "foobar" , esto puede causar problemas en algunas situaciones. Pero estos problemas no son realmente un resultado del desbordamiento.

Desbordamiento de búfer

Pueden existir desbordamientos de búfer en PHP debido a las vulnerabilidades en el propio PHP, pero no debido al código de la aplicación.

Aquí hay una lista de algunos vulnerabilidades de desbordamiento de búfer en PHP .

    
respondido por el tim 21.03.2016 - 21:09
fuente

Lea otras preguntas en las etiquetas