¿Podría un hacker malicioso alterar una variable de publicación oculta?

5 minutos de lectura

avatar de usuario
Vlad

Sé que un POST puede falsificarse en términos de dominio de origen, pero ¿qué hay de poder cambiar las variables de las variables POST ocultas en mi HTML? Me preocupa que alguien pueda alterar el valor de “cantidad” en mi formulario de PayPal a partir de esto:

<input type="hidden" name="amount" value="1.00">

a esto:

<input type="hidden" name="amount" value="0.01">

o algo similar. Gracias.

  • Esto es fácilmente posible con javascript. Aún más fácil con la barra de herramientas para desarrolladores web de Firefox. Puede hacer visibles los campos de formulario ocultos.

    – Mirador

    29 de noviembre de 2011 a las 15:30

  • Considere también que NO HAY RAZÓN PARA PRESUME que su formulario se está utilizando para PUBLICAR datos en su servidor en primer lugar.

    – Horacio

    29 de noviembre de 2011 a las 19:20

  • curl -d amount=0.01 http://path/to/form/handler

    – Eliminación de negación simple

    29 de noviembre de 2011 a las 23:49

  • Diablos, conozco un benevolente hacker que podría hacer esto.

    – Jean-François Corbett

    2 de diciembre de 2011 a las 8:25

avatar de usuario
Tesserex

Sí, es trivialmente fácil para cualquiera modificar las variables de su formulario. Si son GET o POST no importa en absoluto.

Regla de seguridad web n.º 1: Nunca confíes en ninguna entrada del usuario. También se indica como “Todos los usuarios son piratas informáticos maliciosos” o alguna variante del mismo.

respuesta al comentario: la solución es conocer todos los valores correctos en el lado del servidor, sin tener que pasarlos por el lado del cliente (Javascript). Entonces, independientemente de lo que diga el formulario, ya conoce el precio. Simplemente use el mismo valor que usó para completar el formulario en primer lugar.

  • Énfasis en la palabra trivialmente

    –Bob Kaufman

    29 de noviembre de 2011 a las 15:33

  • entonces cuales son mis alternativas? ¿Solo usa php para crear y enviar el formulario? Además, ¿no es esto un riesgo de seguridad para todos los comerciantes de PayPal que no usan un botón encriptado? (la razón por la que no uso un botón encriptado es que necesito cambiar estas variables sobre la marcha)

    – Vlad

    29 de noviembre de 2011 a las 15:34

  • @Vlad ¿Por qué necesita que el usuario devuelva algo que no puede usar? ¿No puede simplemente almacenar esa información del lado del servidor, o si tiene que enviarla al usuario, firmar los datos para que pueda verificar si ha sido manipulado?

    – Roger Lindsjö

    29 de noviembre de 2011 a las 15:38

  • Idealmente, no estaría tomando cantidad como ningún tipo de entrada. Tomaría una lista de elementos y calcularía la cantidad en su script php. En la tienda, muy rara vez vería a los clientes llenar sus carritos de compras y luego decirle al cajero cuánto tienen que pagar.

    – franco

    29 de noviembre de 2011 a las 15:42


  • +1 para esa regla de seguridad web. Nunca confíes (completamente) en ningún aporte que provenga del cliente, jamás. Esto incluye potencialmente cookies encriptadas. Toda la entrada debe ser completamente verificada y validada, cada hora en que se recibe. Nunca almacene nada que no sea algún tipo de token de identificación/sesión del lado del cliente (que aún debe validarse). Tenga en cuenta que algunos usuarios ‘maliciosos’ pueden no estar haciéndolo deliberadamente, si su computadora es parte de una botnet.

    – Clockwork-Muse

    29 de noviembre de 2011 a las 17:05

avatar de usuario
Alex

Actualización 2020:

OWASP cubre este tema en “Teoría de la inyección”donde las aplicaciones aceptan datos de fuentes no confiables, no controladas o potencialmente comprometidas.

La inyección es el intento de un atacante de enviar datos a una aplicación de una manera que cambiará el significado de los comandos que se envían a un intérprete.

Revisar esta “hoja de trucos” de OWASP para obtener una descripción general de las mitigaciones que se pueden implementar para proteger mejor los puntos finales basados ​​en REST.


Sí, es muy sencillo de hacer con las herramientas de inspección del navegador, JavaScript, cURL y otras herramientas.


No debe confiar en el amount siendo el campo lo que habías transmitido inicialmente en la respuesta al cliente. Un enfoque más seguro sería confiar en un identificador para un artículo, que puede asignar a un precio en el servidor (un entorno más controlado).

Sí, es posible cambiar ese valor usando javascript. Si no tiene práctica en el uso de javascript, también puede hacer la prueba con las herramientas para desarrolladores de Google Chrome.

De hecho, esta es una de las principales razones para no confíes en la entrada del usuario.

avatar de usuario
usuario606723

Olvídese de javascript y las herramientas del navegador. Tenga en cuenta que puedo enviar CUALQUIER cookie, argumento POST y GET (pares de clave y valor) que desee, independientemente de si este es un formulario para ellos. (Ver rizo)

Frank dijo: “En la tienda, muy rara vez verías a los clientes llenar sus carritos de compras y luego decirle al cajero cuánto tienen que pagar”.

Trate de pensar en ello de esa manera. los navegador (no usuario) es el cliente y el servidor es el cajero. Cualquier información que fluya desde el navegador al servidor puede ser lo que yo quiera.

Sí. Se pone peor porque ni siquiera tienen que alterar su página para hacerlo. Un usuario podría usar cualquier editor de texto para construir una página html con un formulario lleno de cuadros de texto, cargarlo desde el disco local, llenarlo con lo que quiera y presionar enviar. OTOH, eso aparecerá en algunos valores de encabezado.

O si están realmente determinados, pueden conectarse al puerto 80 en su servidor a través de telnet y falsificar la solicitud HTTP completa, incluidos los encabezados.

No hay un solo byte de la solicitud entrante en el que pueda confiar.

Dicho esto, existen soluciones conocidas para estos problemas que generalmente se implementan en términos de hash, firmas y criptografía, pero no sé lo suficiente como para sugerir dónde buscarlas.

avatar de usuario
Tomás Bonini

En este caso Déjalos cambie el valor si así lo desean y permítales que le paguen $0.01. Pero luego, cuando reciba la IPN (Notificación de pago instantáneo) de Paypal, incluirá el precio que pagaron; verifíquelo con su base de datos de artículos para asegurarse de que sea el precio correcto.

Si no es el precio correcto, no envíe/entregue el artículo. ¡Has ganado $0.01!

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad