¿Es seguro revelar nombres de columnas de tablas en ajax?

2

Tengo una tabla como ...

THINGS_TABLE
============
thing_key           int              PRIMARY KEY
thing_num           varchar(20)
thing_title         varchar(20)
thing_description   varchar(20)

Y algunas funciones de ColdFusion (código del lado del servidor) que se pueden agregar, editar y eliminar de esta tabla. Por ejemplo, una función createThing podría tener este aspecto en ColdFusion. Los parámetros de cfqueryparam en cfquery deben evitar la inyección de SQL , por lo que No creo que la inyección de SQL sea algo de lo que deba preocuparme.

<cffunction name="createThing" access="remote" returntype="void">
    <cfargument name="thing_num" type="string" required="yes">
    <cfargument name="thing_title" type="string" required="yes">
    <cfargument name="thing_description" type="string" required="yes">

    <!--- write to db --->
    <cfquery name="createThingQuery" datasource="my_datasource">
        INSERT INTO THINGS_TABLE (thing_num, thing_title, thing_description) values (   
        <cfqueryparam cfsqltype="cf_sql_varchar" value='#thing_num#'>,
        <cfqueryparam cfsqltype="cf_sql_varchar" value='#thing_title#'>,
        <cfqueryparam cfsqltype="cf_sql_varchar" value='#thing_description#'>)
    </cfquery>
</cffunction>

¿Es seguro revelar los nombres reales de las columnas en las llamadas ajax que ejecutan el código del lado del servidor? Por ejemplo, una llamada ajax que podría verse así:

$.ajax({
    type: "POST",   
    url: "thingFunctions.cfc",
    data: { method : "createThing",
            thing_num : "the number",
            thing_title : "the title",
            thing_description : "the description"
            }})

Este ajax hace que sea realmente obvio cuáles son los nombres reales de las columnas en la base de datos, y es ciertamente posible que mi función ColdFusion use diferentes nombres de argumentos, pero ¿hay alguna ventaja en realidad para usar nombres diferentes? Me parece que podría hacer que el código sea más confuso para que un desarrollador lo lea, sin ofrecer ninguna ventaja desde el punto de vista de seguridad.

Además, quizás haya otros problemas con el uso de llamadas ajax como esta en las que no estoy pensando. Es decir. ¿Un usuario podría editar la página JavaScript y llamar a mi código de ColdFusion de la forma en que no fue pensado originalmente?

    
pregunta Ectropy 25.03.2016 - 18:44
fuente

2 respuestas

1

No proporcionar una asignación directa a los nombres de columna es una ofuscación. No se debe confiar en la seguridad a través de la ofuscación, pero ayuda, aunque sea un poco. Sin embargo, como usted señala, la pregunta es si el compromiso de ocultar estos nombres vale la carga adicional de mantenimiento. Esto es una cuestión de opinión, pero tiendo a decir que no lo es, incluso desde una perspectiva estrictamente de seguridad, el código más obvio es el código que es menos probable que tenga problemas de seguridad.

  

Además, quizás haya otros problemas con el uso de llamadas ajax como esta en las que no estoy pensando. Es decir. ¿Un usuario podría editar la página JavaScript y llamar a mi código de ColdFusion de la forma en que no fue pensado originalmente?

Un atacante puede siempre modificar cualquier cosa en su propio cliente. Este es un punto fundamental de la seguridad web.

No conozco a ColdFusion lo suficiente como para entender realmente lo que sucede en su ejemplo, pero parece que un atacante puede simplemente ingresar valores en un punto final para crear nuevas filas en su tabla. ¿Deberían solo ciertos tipos de usuarios ser capaces de hacer eso? Si es así, es mejor poner alguna autorización y autenticación en el punto final. ¿Habrá problemas si la tabla se hace realmente grande? Imponga los límites de velocidad por usuario y por IP, y cree una alerta cuando la tabla alcance niveles de advertencia y críticos.

    
respondido por el Xiong Chiamiov 25.03.2016 - 18:53
fuente
2

Estoy de acuerdo con Xiong en que la ofuscación de los nombres de las columnas de la tabla hace que su código sea más complicado y más difícil de entender. Si haces esto con cada tabla, puedes confundir a otros desarrolladores (o a ti mismo, mirando el código un año más tarde).

(Supongo que no se puede acceder directamente a su base de datos desde Internet, sino solo a través de su propio servidor. Si es así, debería revisar su arquitectura).

  

Además, quizás haya otros problemas con el uso de llamadas ajax como esta en las que no estoy pensando. Es decir. ¿Un usuario podría editar la página JavaScript y llamar a mi código de ColdFusion de la forma en que no fue pensado originalmente?

Esté siempre preparado para que su API no solo sea llamada desde su propia página web, sino también desde un desarrollador curioso, probándola por diversión, después de haber mirado el código JavaScript o el tráfico HTTP:

  • Siempre debe validar los datos del usuario antes de conservarlos. De lo contrario, podría terminar reparando los datos que causan excepciones en algún lugar de su backend (por ejemplo, tratando de analizar una cadena como fecha, pero teniendo solo un valor de cadena de basura).
  • Si su ruta API hace que se agreguen filas de la base de datos, probablemente solo debería estar disponible para usuarios autenticados.
respondido por el mh8020 25.03.2016 - 20:04
fuente

Lea otras preguntas en las etiquetas