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

178
Vistas
crear un anti trampa en un juego web en línea

Tengo un sitio web simple con un pequeño juego. Tiene un marcador básico que usa express: cada vez que muere, el sitio web envía una solicitud de publicación al servidor con su puntaje y el servidor lo agrega a la tabla de clasificación. Mi problema es que es muy simple explotar la clasificación. a través de devtools, las personas pueden simplemente:

  • deshabilite los colisionadores para que no puedan morir y luego vuelva a encenderlos cuando estén satisfechos con la puntuación
  • Directamente, simplemente establezca el puntaje en el valor que quieran.
  • usar la consola para enviar una solicitud de publicación propia con una puntuación de su elección

Pensé en crear un contador de puntuación del lado del servidor y un verificador de colisiones, pero mi juego tiene un ritmo rápido, así que creo que esto sería problemático, sin hablar de la potencia informática que pondría en el servidor si varias personas juegan al mismo tiempo.

¿Es esta realmente la única solución o hay soluciones más simples en las que no estoy pensando?

código del servidor:

 const express = require('express'); const app = express(); const fs = require('fs'); const { json } = require('express'); app.use(express.json()); app.use(express.urlencoded({extended:true})); app.use(express.static('Build')) app.get('/leaderBoard', (req,res)=>{ var rawData = fs.readFileSync('./database.json'); var data = JSON.parse(rawData); res.json(data); }) app.post('/leaderBoard', (req, res)=>{ var rawData = fs.readFileSync('./database.json'); var leaderBoard = JSON.parse(rawData).leaderBoard; for(var i = 0; i < leaderBoard.length; i++){ if(req.body.score > leaderBoard[i].score){ for(let i2 = leaderBoard.length -1; i2 > i; i2--) leaderBoard[i2] = leaderBoard[i2-1]; leaderBoard[i] = req.body; break; } } fs.writeFileSync("./database.json",JSON.stringify({leaderBoard},null,2)); }) app.listen(process.env.PORT || 3000);
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Una verificación del lado del servidor sería imperativa si realmente desea evitar cualquier trampa... PERO, siempre puede hacer que sea más difícil hacer trampa en el lado del cliente con controles simples, como definir un cambio de puntaje máximo (por ejemplo, si alguien gana más de 100 puntos en 1 segundo, entonces está haciendo trampa).

El uso de un código minimizado no puede hacer daño, y también puede reemplazar el nombre de sus variables por otros abstractos (a, b, c, en lugar de "puntuación"). Por esa misma razón, una verificación de colisión no debe definirse simplemente por un indicador de verdadero/falso.

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