¿Puede una consola de JavaScript del navegador alguna vez ser un problema?

4

Estoy seguro de que la mayoría de ustedes está familiarizado con el juego basado en JavaScript Candy Box .

Como probablemente sepas, uno puede engañar al sistema de dulces de este juego enviando comandos a la consola.

Por ejemplo, si hace clic en el enlace, verá que el número de caramelos aumenta lentamente. Alguien que usa Google Chrome (me refiero a Chrome específicamente porque conozco los atajos de teclado; quizás esto se puede hacer en Firefox o IE) que quiera hacer trampa puede presionar Ctrl + Shift + I , navegar a Console y enviar candies.setNbrOwned(2147483647) a la consola para un azúcar alto y rápido.

¿Puede esto plantear un problema en otros contextos? Por ejemplo, digamos que tengo un sitio web que vende widgets. ¿Se puede modificar el saldo de alguien (o incluso el precio de mis widgets) mediante el envío de algo como userBalance = 2147483647 o widget.setPrice(0.01) mediante el uso de JavaScript (tal vez incluso sin usar la Consola de JavaScript del navegador)?

Si no es posible, ¿por qué es así? Mi primera suposición de por qué podría no ser posible es porque las variables modificadas se almacenarían como variables locales y no afectarían nada importante, como cambiar elementos a través de las características de "Inspeccionar elemento".

Si de hecho es posible, ¿a través de qué medios se puede hacer y cómo se puede evitar?

    
pregunta Tiwa Aina 21.05.2015 - 06:55
fuente

3 respuestas

4

Hay dos tipos principales de problemas que pueden ocurrir con la ejecución del lado del cliente:

  1. Un cliente malintencionado puede modificar su estado de cliente e intentar que el servidor acepte ese estado modificado como válido
  2. Un usuario malintencionado puede engañar a un usuario engañoso para que ejecute el código en su consola, algo causado por Self XSS

Clientes maliciosos que ejecutan JavaScript

Cuando un cliente sin confianza y sin confianza interactúa con un servidor, el servidor debe, siempre que sea posible, validar todos la entrada recibida por el cliente y la legalidad de las acciones del cliente. De no hacerlo, abre el servidor para una amplia gama de ataques conocidos como 'Interacción insegura entre componentes' . Al igual que todas las entradas de los formularios web se deben validar, debe validar los datos que reciba del lado del cliente a través de consultas AJAX u otros mecanismos.

Una vez que haya validado todos los datos, todavía hay una serie de casos en los que los usuarios pueden abusar de los scripts del lado del cliente, como los juegos en línea. Las defensas que puede establecer contra jugadores que se dan más recursos de los permitidos, que hacen más movimientos de los permitidos, se desplazan más de lo permitido en un juego de varios jugadores, etc., son relativamente limitadas. Algunas estrategias de defensa podrían incluir:

  • analizar el material de archivo del juego capturado por una aplicación privilegiada anti-trampa para verificar si las bibliotecas de renderizado se modificaron o se inyectaron scripts: una defensa clásica para juegos de escritorio competitivos, pero normalmente no tiene esta capacidad para un cliente web >
  • hashear las funciones que se están ejecutando y enviarlas a los servidores para comparar, esto solo frustraría los trucos básicos que olvidan modificar también el código de hash
  • calcular los límites de / beneficios de limitación de velocidad que un usuario puede obtener de manera realista dentro de un período de tiempo (por ejemplo, no más de X por minuto): esta es probablemente la defensa más eficiente, ya que es independiente de la plataforma del cliente

Auto scripting entre sitios

Las redes sociales en línea como Facebook son particularmente cautelosas con las personas que descargan "hacks" que dicen darles a los usuarios más "me gusta" o acceso a los perfiles de sus amigos. Se pueden encontrar muchos scripts maliciosos que, si se copian en un navegador, permitirán que un tercero se haga cargo de su sesión de usuario. ¡Este es un escenario ideal ya que los atacantes pueden ejecutar código arbitrario en su sesión de usuario válida! Facebook ahora inyecta un mensaje de advertencia en las consolas de desarrolladores de los navegadores para ayudar a combatir este fenómeno:

    
respondido por el Steve DL 21.05.2015 - 21:23
fuente
4

Sí, puede ser un problema, pero hay formas en que las aplicaciones pueden protegerse contra él.

Dos lados de cada aplicación de Internet.

Para comprender la seguridad de las aplicaciones de Internet, debe comprender la diferencia entre el cliente y el servidor. Los datos generados por el cliente (el navegador), deben ser limpiados y validados antes de ser por el servidor.

Si tuviera un sitio web que vendiera widgets, nunca almacenaría el saldo de una cuenta de usuario en su máquina, en su navegador. Esto sería como un banco de ladrillo y mortero que le pide que lleve el balance a casa y que lo devuelva cuando esté listo para hacer un retiro. Por lo tanto, el lado del servidor de la aplicación debe realizar un seguimiento del saldo y solo permite que la aplicación cliente solicite que se tomen acciones en su nombre.

¿Cómo podría evitar que las personas hagan trampas en mi juego?

Si el juego está implementado en el lado del cliente, no puedes. Cualquier lógica que se haga en el lado del cliente puede ser alterada. Sin embargo, hay algunas maneras de hacerlo más difícil. Minimizar y ofuscar el javascript aumentará el tiempo que lleva entender el código, pero en realidad no protegerá nada.

Idealmente, la lógica del lado del cliente solo representaría la vista y luego enviaría solicitudes de acción al servidor. La vista del cliente siempre se puede alterar, pero debido a que toda la lógica real tiene lugar en el servidor, la integridad del juego permanece intacta.

    
respondido por el amccormack 21.05.2015 - 07:16
fuente
0

Javascript, y todas las demás tecnologías del lado del cliente , son intrínsecamente inseguras. No puedes evitar que la gente haga trampas, solo hazlo más difícil.

    
respondido por el ddyer 21.05.2015 - 08:43
fuente

Lea otras preguntas en las etiquetas