¿Cómo puedo evitar que un usuario edite mi código en su navegador?

11

Descripción

Estoy diseñando una aplicación Node.JS (más como un sitio web completo). La aplicación enviará cinco archivos JavaScript y tendrá <script>etiquetas que los vincularán.

Pregunta

¿Cómo puedo evitar que los usuarios y atacantes miren y editen mi código ?

  • Un ejemplo sería:

    • Ctrl+ Shift+I

    • En Devtools , vaya a Fuentes , seleccione un archivo para editar (es decir index.html) y escriba ediciones

    • Al pulsar Ctrl+ Shará que la edición en vivo que se produzca

Me gustaría evitar que el ejemplo anterior suceda ... ¿Es posible?


Esto es lo que pensé:

Crearé otro archivo JavaScript del lado del cliente, prevent_keys.js

Escuchará por Ctrl+ Shift+ I.

Si regresa true(es decir, se presionaron las teclas), lo hará con loglas teclas.

Sin embargo, eso no impedirá que el usuario use Devtools directamente.

Edwin Pratt
fuente
16
No puede evitar que nadie vea o modifique su javascript que se ejecuta en el navegador. Hipocresía.
jfriend00
77
El hecho de que la respuesta a una pregunta sea "No puedes" no significa que deba ser rechazado.
RubberDuck
1
Pregunta muy relacionada: validación solo de JavaScript en el envío del formulario AJAX . Especialmente revise la respuesta aceptada con su ejemplo trivial de cómo enviar una llamada POST que, a su servidor, se ve idéntica a la que vino de su cliente, a pesar de que ni siquiera proviene de un navegador web.
8bittree

Respuestas:

35

Literalmente, no puede evitar que los usuarios accedan y modifiquen el contenido que les está enviando. No tiene control sobre el navegador, o qué navegador usan, o si de hecho están descargando su código fuente a través de un navegador. Está ejecutando su código en el dispositivo de otra persona. No debe ni puede asumir nada sobre la integridad de este dispositivo.

Si tiene un código que no desea exponer, no lo envíe al navegador. En su lugar, deje que el navegador envíe una solicitud a un servidor donde ejecute el código secreto.

Como ejemplo concreto, no verifique las contraseñas en el cliente. El cliente podría modificarse para decirle siempre al servidor que "la contraseña era correcta". En cambio, la autenticación debe realizarse en su servidor de confianza.

amon
fuente
44
"El cliente podría modificarse para decirle siempre al servidor" la contraseña era correcta "". tos libssh tos
Philip Kendall
¡Muchas gracias! Estaba enviando controladores para iniciar sesión, cerrar sesión y registrarme. Lo he cambiado a rutas en el servidor.
Edwin Pratt
23

No puedes Una de las reglas fundamentales de la informática: no puedes confiar en el cliente . Independientemente del esquema inteligente que piense, puedo evitarlo si tengo el control del cliente.

Philip Kendall
fuente
2
He movido todos los controladores de validación, carga, descarga, userAccouts () a la inclusión del servidor.
Edwin Pratt
1
"No puedes confiar en el cliente" es solo una cara de la moneda. El otro lado dice: "No eres el dueño del cliente". El navegador que ejecuta su javascript no es suyo, el sistema operativo que ejecuta el navegador no es suyo, y el hardware en el que se ejecuta el navegador no es suyo. Lo que sea que haga el propietario de estas cosas con los datos que les envíe no es asunto suyo . Es una cuestión de respeto para sus clientes no intentar usurpar sus cosas.
cmaster - reinstalar a monica el
2

¿Por qué no quieres que se modifique el código?

¿Seguridad? ¿Confiar? ¿Secreto comercial?

Luego, no envíe el código, haga que el cliente envíe una solicitud y devuelva un resultado. Tal vez no sea un resultado privado o privilegiado, solo un hecho es suficiente para muchas IU.

¿Porque las versiones ligeramente modificadas de su propio código están perjudicando sus resultados?

Use un ocultador de código, un gestor de nombres y segmentos de código triviales.

Estas técnicas elevan la barra en el nivel de habilidad real y las herramientas necesarias para hacer una ligera variante de su sitio web. Solo tenga en cuenta que estas técnicas pueden hacer que su código sea más lento, pueden introducir errores y mensajes de error interesantes y sin sentido, y aún así pueden ser superados por alguien con las herramientas y / o habilidades adecuadas. Así que realmente considera si eso vale la pena. Al final del día, cualquiera podría escribir el mismo código.

Kain0_0
fuente