¿Qué tan peligroso es revelar la estructura de una tabla a los usuarios?

6

Pido disculpas si esta es una pregunta tonta.

Hace poco me encontré con un sitio web que incrustó su cierre de sesión de error en una respuesta JSON si la solicitud al sitio web fallaba. En este caso, parecía que había una falta de coincidencia en la base de datos e imprimió la solicitud de SQL, incluida la estructura de la tabla de la base de datos, en la consola, de este modo:

¿Qué tan peligroso / peligroso es esto y por qué?

Mi intuición me dice que esta es una mala práctica y no es muy segura, pero no puedo precisar exactamente la razón.

    
pregunta Programmer 15.08.2018 - 20:07
fuente

2 respuestas

9

A lo que se refiere es potencialmente una vulnerabilidad de SQLi basada en errores, que se incluye en una categoría más amplia conocida como In-band / Classic SQL injection. Esencialmente, estas vulnerabilidades permiten a un atacante lanzar un ataque y recopilar información sobre la base de datos desde el mismo canal de comunicación. Digo que solo es una vulnerabilidad potencial porque no estamos seguros de si realmente ha probado SQLi, sino que acaba de descubrir un error. Esto se puede confirmar a través de pruebas, asumiendo el permiso.

La vulnerabilidad de SQLi basada en el error que potencialmente está viendo proporciona información sobre la estructura de la base de datos (como ha señalado), lo que ayuda en la enumeración de la base de datos (potencialmente toda la base de datos) para el atacante.

Está diciendo: "Hola, amigable usuario de Internet que no tengo motivos para desconfiar, la consulta que está intentando realizar (obviamente con intenciones maliciosas) es desafortunadamente incorrecta, así que aquí está la estructura exacta de mi base de datos para que su próxima ¡La consulta se puede escribir de manera más apropiada para lograr el éxito! "

Este mensaje de error detallado debe inhabilitarse en un sitio activo o registrarse en un archivo con acceso restringido. Una mejor práctica sería, dependiendo de la situación, proporcionarle al usuario un error de 400 o 500 al mismo tiempo que es consciente de no proporcionar más información de la que es absolutamente necesaria.

    
respondido por el waymobetta 15.08.2018 - 20:24
fuente
0

La divulgación de sus estructuras de tablas no es inherentemente peligrosa y no abre nuevos problemas de seguridad que no existían en su aplicación. puede ayudar a un atacante a encontrar un exploit existente en su aplicación, pero es muy probable que puedan trabajar en la estructura de la tabla de todos modos.

Casi todos los sitios web para los que he visto el código tienen los nombres de entrada del formulario HTML exactamente iguales a las columnas db, ya que realmente no hay necesidad de traducirlos. Por lo general, las únicas otras columnas que no puede ver mientras envía son cosas como id, created_at, deleted_at, author_id y otras cosas obvias. También teniendo en cuenta que hay numerosos sitios web de código abierto en los que puede leer todo el esquema, pero esos sitios siguen siendo seguros.

El problema principal con este ejemplo en particular es que parece ser una herramienta de depuración de desarrollo que no se tuvo la intención de dejar en producción. En mi opinión, la información de este ejemplo no es confidencial, pero a menudo las herramientas de depuración brindan otra información que puede ser muy insegura, como las variables ENV que pueden contener contraseñas.

Si te preocupa la seguridad, deberías estar filtrando los parámetros que el usuario puede enviar para que el usuario no pueda actualizar cosas como la columna de roles en su propia cuenta. El usuario que sepa el hecho de que hay una columna de rol no ayudará si el servidor rechaza ese parámetro.

    
respondido por el Qwertie 28.08.2018 - 08:01
fuente

Lea otras preguntas en las etiquetas