Pregunta

Revise esta página desde el New York Times:

  

http://homedelivery.nytimes.com/HDS/learnMorePopUp.do   ? mode = common.learnMorePopUp
   & amp; productId = NDS
  &prodRate=7.40

Me sorprendió ver que cuando modifiqué manualmente el parámetro prodRate , la página se actualizó:

  • La tasa de suscripción introductoria.
  • La tasa de suscripción regular.

¡Pruébalo tú mismo! Ahora, no he hecho mucho desarrollo web, pero sé que esto probablemente no debería suceder. Así que me pregunto:

  • ¿Qué tipo de implementación causaría este comportamiento?
  • ¿Cómo modificaría la página para ocultar estos parámetros confidenciales al usuario final?
¿Fue útil?

Solución

Es posible que desee reformular su pregunta, ya que las únicas respuestas que puedo concebir no son muy ilustrativas:

P: ¿Qué tipo de implementación causaría este comportamiento?
A: Una en la que la entrada del usuario puede controlar el comportamiento interno y confiable. Si está pidiendo " por qué alguien haría esto " ;, generalmente lo veo como un malentendido. El autor del código generalmente no se da cuenta de que el usuario puede (a) controlar el valor y / o (b) incluso descubrir que existe. La mayoría de las veces, he visto esto implementado como una redirección: al hacer clic en un botón, el servidor determina la cantidad y luego redirige el navegador a una nueva página que mantiene el valor

P: ¿Cómo modificaría la página para ocultar estos parámetros confidenciales al usuario final?
R: No almacene el valor de manera que el usuario final lo pueda editar. Si tiene almacenamiento disponible en el servidor (como un motor Servlet), almacénelo en el contexto de la sesión. Si no tiene un buen mecanismo de sesión, puede almacenarlo en una cookie firmada o HMAC'd.

Otros consejos

Probablemente solo están leyendo el valor de la cadena de consulta para fines de visualización. Dudo mucho (o más bien, realmente espero) que el procesamiento de un pedido real no se base en ese valor, sino más bien en una búsqueda con el Id. Del producto.

Bueno, ¿ya intentaste pedirlo? Podría validar la entrada en el back-end.

En cuanto a otras opciones, podrían haber considerado publicar la información o poner la información en una cookie. Tampoco son exactamente a prueba de tontos. No puede obtener una nueva ventana con una publicación y un usuario puede desactivar las cookies.

No puedes ordenar desde esa página, así que no veo un agujero de seguridad aquí. Sí, es cursi, pero estaría mucho más preocupado si el flujo real de pedidos estuviera tan mal construido. Facilita la actualización de la tasa en un solo lugar y solo pasa el valor, así puedo ver cómo sucedió.

Tenemos algunas páginas de calificación que hacen más o menos lo mismo. No están conectados al flujo de compra real, por lo que los parámetros están bien. Si el cliente quiere confundirse con la edición de una URL, así sea ... el flujo de pedidos real está basado en la base de datos y las ediciones de usuario nunca son confiables.

He encontrado todo tipo de malas prácticas como esta. He visto sitios web que pasan consultas completas de SQL en la cadena de consulta, que luego se ejecutan . También recuerdo haber encontrado una tienda en línea que pasó los precios en la cadena de consulta. Cambié uno a un valor negativo y, efectivamente, al momento de pagar, ¡el precio fue negativo! Sin embargo, no fui más lejos, técnicamente es un fraude y no vale la pena arriesgarse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top