¿Hay problemas conocidos con ColdFusion 9 isNumeric check?

2

Probablemente solo estoy siendo paranoico otra vez por la seguridad. Lo último que me mantiene despierto por la noche son los controles que utiliza uno de nuestros sitios web. Ejecuta ColdFusion 9 en el entorno de Windows y verificamos una entrada del usuario por isNumeric para verificar que una cadena o entrada es de hecho un número. Si no es un número, detenga la ejecución y muestre el mensaje al usuario, de lo contrario, haga lo que debe hacerse normalmente. Mi pregunta es, ¿hay una manera de romper este cheque? ¿Básicamente, algún tipo de formato que sea numérico se reportará como un número pero en realidad puede incluir algo malo?

<cfparam name="userInput" default="0">
<cfif isNumeric(userInput)>
    // Should be a number id 500
    // Use value to do SQL stuff because should be number
    // I know, not the best practice. Plan to fix all of these but the 
    // amount of code is staggering to fix all of these. Figured 
    // start with one thing then move on
    <cfquery>
       SELECT * FROM db WHERE serial = #userInput#
    </cfquery>
<cfelse>
    // Not a number ie '500sws'
</cfif>

¿Hay algo que se pueda pasar a userInput que pueda engañarlo para que informe verdadero, pero en realidad no lo sea?

La razón por la que pregunto es porque este sitio es antiguo. Las cosas están fuera de fecha. Estoy en proceso de trabajar una gran cantidad de código y hay puntos de vulnerabilidad que corregiré a medida que avance, pero si isNumeric puede ser engañado, tengo más trabajo por hacer.

No estoy seguro si lo estoy explicando bien. Déjame saber si es necesario que haya una aclaración.

Si es necesario moverlo en otro lugar donde me avise. Mi última pregunta de seguridad que pregunté terminó aquí, así que decidí intentarlo primero primero. Gracias a todos.

    
pregunta jkw4703 07.03.2017 - 20:52
fuente

1 respuesta

1

No puedo probarlo para CF9, porque esta versión es demasiado antigua y ya no es fácil de encontrar. Para estar 100% seguro, debe forzar la conversión a un número antes de usarlo. Por ejemplo (sin probar).

<cfquery>
   SELECT * FROM db WHERE serial = #Val(userInput)#
</cfquery>
    
respondido por el David J 10.03.2017 - 10:35
fuente

Lea otras preguntas en las etiquetas