Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

169
Vistas
Cómo impedir que el usuario edite la URL

Actualmente estoy creando un sitio web que responde preguntas y tengo un problema. Es decir, por ejemplo, al responder a la segunda pregunta, pero el usuario quiere volver a la pregunta anterior para editar la respuesta, hay 2 formas:

  1. Use el botón de deshacer de su navegador
  2. Cambiar la URL

ej: pregunta?id=2 cambiar a pregunta?id=1

La web recargará la pregunta anterior y podrán cambiar la respuesta.

He bloqueado el método n. ° 1, pero si el usuario cambia la URL, ¿no sé cómo bloquearlo? Quiero preguntar por su solución, estoy usando js, sería aún mejor si se usa vue3 ts.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Si desea evitar que el usuario ingrese una nueva respuesta a la pregunta n. ° 1, debe mantener algún estado en el servidor. Mantenga una lista de preguntas, controlando cuáles han sido respondidas y cuáles no. La página que atiende cuando solicita la question?id=1 y el estado del servidor es tal que el usuario ya respondió la pregunta n.º 1 debe mostrar un error o simplemente obligarlo a ir a la primera pregunta sin respuesta, ya sea por redireccionando o simplemente presentando la pregunta 2 o algo razonable. Pero la conclusión es que el servidor necesita el estado.

Esto es como, si voy a la página de mi banco y simplemente edito mi saldo en mi navegador para agregar algunos 000 más al final del saldo de mi cuenta bancaria, en realidad no cambiará la cantidad de dinero en mi banco, solo lo que está siendo se muestra localmente. Para cambiar realmente el saldo bancario, tendría que hacer una solicitud al servidor que resulte en el cambio de mi saldo.

Lo mismo para ti. Si no desea ACEPTAR una nueva respuesta a una pregunta que ya se envió, sabrá cuándo la página intenta enviar la respuesta. La página probablemente hace un POST con la respuesta del usuario a la pregunta 1 y el servidor guarda la respuesta en alguna parte. Si el navegador hace otro POST con una respuesta a la misma pregunta (porque el usuario pirateó la URL), simplemente puede rechazar la solicitud y negarse a cambiar el estado de los servidores, devolviendo algún tipo de error como "ya respondió esa pregunta".

La experiencia que brinde al usuario en este evento realmente no importa tanto (están pirateando), pero para hacer algo razonable, considere redirigir el navegador a la pregunta correcta. La siguiente pregunta sin respuesta podría ser parte de la respuesta a la respuesta REST "ya respondió esa pregunta".

about 4 years ago · Juan Pablo Isaza Denunciar

0

No es posible evitar directamente la modificación de una URL de nivel superior; sin embargo, existen otras soluciones que puede tomar. Si está utilizando Vue Router, puede usar protecciones de navegación y redirigir de nuevo si se detecta un cambio no válido. De lo contrario, para una solución más tradicional, puede ocultar la URL dentro de un iframe , cuya URL sería inaccesible desde la barra de navegación. HTML de muestra:

 <iframe src="/question?id=2"></iframe>

Tenga en cuenta que se puede omitir cualquier seguridad del lado del cliente y, en su lugar, es mejor almacenar datos confidenciales en el servidor. En el caso de un iframe, sería trivial que alguien con conocimientos de herramientas de desarrollo modificara la URL que contiene.

about 4 years ago · Juan Pablo Isaza Denunciar

0

No puede evitar que el usuario cambie la URL, por lo que lo que debe hacer es encontrar alguna forma de detectar si el usuario cambió la URL y luego hacer algo en el backend. El problema es que no podría enviarlos de vuelta a la página de la que vinieron, por lo que el flujo se interrumpiría.

Si está utilizando entradas de <form> estándar, probablemente la forma más sencilla de hacerlo sería incluir una entrada oculta con una ID única cuando se publique la página:

 <input type="hidden" id="noCheating" name="noCheating" value="34657">

Luego, cuando el servidor web procesa el POST, puede verificar si no existe noCheating en los datos publicados y si no se recupera.

Si las solicitudes de página posteriores tienen referer de referencia, el servidor podría inspeccionarlos y luego rechazar las solicitudes GET que no los tengan.

Ambos métodos son una especie de fruta al alcance de la mano y están destinados a mantener alejado al 99% de las personas a las que no les importa. Si le preocupan los piratas informáticos reales, tendrá que guardar el estado en cada paso y luego verificar que los datos de las preguntas anteriores aún no se hayan enviado como sugiere @Wyck.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda