¿Vulnerabilidad de PHP sprintf?

3

En algunos sitios, como WriteCodeOnline, sprintf , vsprintf y otras funciones de cadena con formato relacionadas están deshabilitadas por razones de seguridad:

  

Advertencia: vsprintf () se ha desactivado por razones de seguridad en la línea 1

Me pregunto cuáles son estas razones de seguridad. Ya he leído el artículo de Wikipedia en cadena de formato no controlada pero solo aborda los aspectos del uso de printf en C.

¿Cuáles son los problemas de seguridad al ejecutar *printf en PHP? Obviamente, la función no está diseñada para prevenir las inyecciones de SQL, pero es una cuestión de usar la herramienta correcta para el trabajo.

    
pregunta rink.attendant.6 11.10.2014 - 20:41
fuente

2 respuestas

5

Sí, no es el lenguaje C / C ++; sin embargo, perl, PHP, ruby y java son descendientes que llevan a cabo varias convenciones del lenguaje C. Al no tener% n, php elimina parte del problema, pero aún tiene% x que puede explotarse en ciertas circunstancias.

Básicamente, printf() y sus variantes pueden permitir el control de la cadena de formato si no la especifica .

La entrada de usuario no validada puede proporcionar la cadena de formato de su elección que llevará a una condición de desbordamiento de búfer (no un desbordamiento de búfer real).

Modern Perl y PHP emitirán advertencias durante la fase de desarrollo, por lo que no creará un código sin la cadena de formato. Si decide ignorarlos, puede tener un problema.

Dado que el sitio al que hace referencia le permite poner cualquier cosa vieja para probar el código, impiden que se ingresen cadenas de formato creativo en printf() que pueden comer memoria, crear un ataque de denegación de servicio, causa un programa prematuro terminar o bloquear el intérprete de PHP en ese sitio web .

Vulnerabilidad de cadena de formato en C

    
respondido por el Fiasco Labs 11.10.2014 - 22:57
fuente
1

No en ningún sentido tradicional, ya que el sprintf de PHP no admite ninguna de las conversiones realmente peligrosas como% n. Una cadena de formato controlada por el usuario aún puede causar algunos estragos limitados (considere% 99999999s), pero lo peor es que podría consumir memoria y tiempo.

siguiente es un desbordamiento de entero. Lo que lleva al siguiente código: -

<?php
echo sprintf('%2147483646$s', "foo"); # Warning: Too few arguments
echo sprintf('%2147483647$s', "foo"); # Warning: Argument number must be greater than zero

error de PHP # 61531

    
respondido por el Aayush 08.09.2017 - 10:11
fuente

Lea otras preguntas en las etiquetas