Determine todos los campos posibles en el formulario HTML

0

¿Es posible determinar, desde el lado del cliente, todos los campos válidos para un procesador de formularios backend dado, incluso si están excluidos de la página web que contiene el formulario?

Por ejemplo:

Suponga un procesador de formularios que tiene varios formularios HTML que se le envían. Un formulario solo tiene 5 campos, un formulario más 'privilegiado' podría tener 10. Nada impide que el cliente envíe los 10 campos editando el formulario de 5 campos, excepto que no conocen los campos sin haber visto ambos formularios.

Entonces, en este caso, el desarrollador de la aplicación web está intentando controlar el acceso a ciertas funciones al excluir campos de formulario específicos de una página. ¿Puede un usuario identificar qué campos están disponibles, pero no se muestran, si solo tienen acceso a la versión limitada del formulario?

Si la respuesta es "solo a través de adivinanzas", ¿este modelo de "seguridad" se considera seguridad a través de la oscuridad?

OP Edit - Con suerte añadiendo algo de claridad.

Una aplicación con la que trabajo está segmentada en múltiples módulos disponibles para administradores para varias funciones. A los administradores se les puede otorgar acceso a los módulos de forma individual (por ejemplo, a la administración se le puede dar acceso al módulo 1 y al módulo 3 y no se le pueden otorgar derechos al módulo 2). Luego, la aplicación permite que los derechos de administración se administren a un nivel más granular mediante el ajuste de los derechos de visualización / edición por elementos individuales dentro del módulo. Sin embargo, me he dado cuenta de que el permiso de solo lectura está controlado (solo en el lado del cliente) por los campos de formulario deshabilitados y la exclusión de los campos de formulario. Al conocer el ID de un campo faltante, puedo enviar y cambiar valores incluso si el campo no está en la fuente de la página. Puedo explotar esto porque conozco el nombre de los campos faltantes, pero ¿qué tan vulnerable es la aplicación a la explotación por parte de personas que desconocen los nombres de los campos faltantes?

    
pregunta JG7 17.10.2018 - 03:13
fuente

3 respuestas

1

¡Esto no es seguro! Es seguridad en la oscuridad, y no lo suficiente como para proteger nada de valor. Hay muchas maneras en que un atacante podría adivinar los nombres de los campos:

  • Adivinando. Si escribes un buen software, tus nombres son descriptivos y fáciles de adivinar. Si quiero eliminar algo, ¿por qué no intenta configurar delete a 1 y ver qué ocurre?
  • Fuerza bruta.
  • Echar un vistazo al código fuente si está disponible.
  • Si un usuario ha tenido acceso al nivel de administrador, pero se le revocó, es posible que haya guardado los nombres de los campos.
  • Comprueba el caché del navegador de tus colegas.

Antes de realizar cualquier acción, el servidor debe verificar que el usuario actual tenga los privilegios suficientes para realizar esa acción.

    
respondido por el Anders 17.10.2018 - 11:17
fuente
0

Tienes algo de HTML, que omite ciertos campos de formulario confidenciales, ¿no?

No hay una conexión real entre cómo funciona la lógica de backend y cómo se muestra la interfaz, por lo que en teoría es imposible que un usuario sepa los nombres de los campos omitidos solo en base al HTML.

Dicho esto, el enfoque correcto es validar la seguridad en el backend, y no debe asegurar las cosas simplemente ocultándolas de la aplicación cliente .

Al ocultar los campos de formulario y al utilizarlos como la única forma de seguridad, esos nombres de campo se convierten efectivamente en secretos, como las contraseñas o las claves privadas. Algunas recomendaciones comunes para información secreta:

  • Genere aleatoriamente secretos: no debería tener ningún significado. ¿Tus nombres de campo se parecen a "batería de caballo correcta" o "gbKtDAABylCGSg"?
  • Los secretos deben protegerse estrechamente contra la divulgación a partes no autorizadas. ¿Ha examinado el código JavaScript, los mensajes de error del servidor, etc., para asegurarse de que no revelen sus nombres de campo?
  • Los secretos no deberían entrar en el control de la fuente, porque eso aumenta significativamente el riesgo en caso de una fuga en la fuente (lo que a veces ocurre). (y realmente, esto se aplica a cualquier situación en la que tengas seguridad por oscuridad)

Supongo que al menos 2 de estas medidas, o quizás todas, no se han hecho. Si bien es cierto que un usuario no puede simplemente adivinar mágicamente cuáles son los nombres de los campos que faltan (por lo que esto podría no ser una situación de "el cielo se está cayendo, arreglar esto ayer"), los usuarios PUEDEN adivinar los nombres comunes, y la autenticación de back-end definitivamente debería ser utilizado como el mecanismo de seguridad real.

    
respondido por el Ethan Kaminski 17.10.2018 - 06:22
fuente
0

En general: si un atacante podría romper su sistema con solo mirar el código fuente, entonces sí, es "seguridad a través de la oscuridad" y no debe confiar en él. Debe validar en el servidor para que el usuario tenga acceso a los campos que está enviando. No tienes control sobre qué forma utilizará un atacante para atacar tu servidor.

    
respondido por el Ben 19.10.2018 - 03:32
fuente

Lea otras preguntas en las etiquetas