Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

149
Views
Evitar que socket.io envíe spam a los sockets

Estoy haciendo un juego multijugador usando socket.io. Aquí hay una parte de mi código de servidor.

 io.on('connection', (socket) => { console.log("socket has connected!!") socket.on("go", (name) => { addPlayer(name); }) socket.on("move", (angle) => { //do movement stuff }) })

Ahora la gente está colapsando mi servidor creando sockets de spam. Están abriendo la consola y escribiendo este código en el cliente:

 setInterval(() => { var socket = io() socket.emit("go", "haha ugothacked") },10)

Esto crea 100 jugadores cada segundo y eventualmente bloquea mi servidor. ¿Cómo evito esto? Sé que tienes que usar algún tipo de límite de velocidad. No sé cómo obtener la ip del socket.

Estoy usando socket.io v4

¿Cómo hago esto?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Mirando https://socket.io/docs/v3/server-api/ , puede usar socket.handshake.address para obtener la IP del cliente que se conecta. Después de eso, debe crear una matriz u objeto del lado del servidor que contenga las ip junto con la cantidad de solicitudes que han realizado para que pueda crear un limitador de velocidad y verificar cuántas solicitudes han realizado en los últimos minutos, puede también simplemente bloquee por completo las nuevas solicitudes de la misma conexión o cosas como crear un nuevo jugador.

También puede obligar a las personas a crear una cuenta y validar su correo electrónico antes de jugar su juego, pero eso se puede hacer en unos 10 segundos usando algo como https://temp-mail.org/en/ , por lo que si bien podría ser un extra capa de protección y los ralentiza, no evitará su problema.

También puede acceder a los encabezados de solicitud en el objeto de solicitud, desde ahí puede tomarles una huella digital. Sin embargo, una mejor solución, para no meterse en problemas con GDPR o violar la privacidad de las personas, es tal vez almacenar un valor uuid como cookie/almacenamiento local y hacer que el cliente lo pase como un encabezado de solicitud. En ese caso, no podrán simplemente generar su propio uuid y usted puede apuntar a su uuid a propósito para limitarlos/bloquearlos en eventos de socket. Sin embargo, esto es más o menos lo mismo que usar su IP en primer lugar.

No veo una forma en que pueda lograr lo que desea sin usar un identificador único, como una IP o un uuid, y crear un lado del servidor limitador de velocidad. Aparte de eso, puede usar un servicio de seguridad como cloudflare para establecer un límite de tasa para usted, https://blog.cloudflare.com/cloudflare-traffic/ , donde puede establecer un límite de tasa en el token de autenticación, entre otras cosas, pero creo que no funcionará si necesita bloquear inmediatamente un evento incluso en una segunda llamada (no sé si sus reglas permiten ese nivel de configuración).

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!