該賞金過期5天。這個問題的答案有資格獲得 50聲望獎勵。 Coder Gautam YT想引起更多人對這個問題的關注:
一種限制套接字 io 垃圾郵件加入的方法。
我正在使用 socket.io 制作多人游戲。這是我的服務器代碼的一部分。
io.on('connection', (socket) => {
console.log("socket has connected!!")
socket.on("go", (name) => {
addPlayer(name);
})
socket.on("move", (angle) => {
//do movement stuff
})
})
現在人們通過創建垃圾郵件套接字來使我的服務器崩潰。他們正在打開控制臺并在客戶端中輸入以下代碼:
setInterval(() => {
var socket = io()
socket.emit("go", "haha ugothacked")
},10)
這每秒創建 100 個玩家并最終使我的服務器崩潰。我如何防止這種情況。我知道你必須使用某種速率限制。我不知道如何獲取套接字的 ip。
我正在使用 socket.io v4
我該怎么做呢?
uj5u.com熱心網友回復:
您可以使用反垃圾郵件庫或創建自己的反垃圾郵件庫。
如果您為此選擇一個庫,您可以使用:https : //www.npmjs.com/package/socket-io-anti-spam
uj5u.com熱心網友回復:
查看https://socket.io/docs/v3/server-api/,您可以使用它socket.handshake.address來獲取連接客戶端的 IP。之后,您需要構建一個服務器端陣列或物件,其中包含 ips 以及它們發出的請求量,以便您可以構建速率限制器并檢查它們在最后幾分鐘內發出的請求數,您可以也只是完全阻止來自同一連接的新請求或諸如創建新玩家之類的事情。
您還可以強制人們在玩游戲之前創建一個帳戶并驗證他們的電子郵件,但這可以使用https://temp-mail.org/en/ 之類的東西在大約 10 秒內完成,因此雖然它可能是額外的保護層并減慢它們的速度,它不會阻止您的問題。
您還可以訪問請求物件中的請求標頭,從中您可以對它們進行數字指紋識別。然而,一個更好的解決方案,不要遇到 GDPR 的麻煩或侵犯人們的隱私,也許是將 uuid 值存盤為 cookie/localStorage 并讓客戶端將其作為請求標頭傳遞。在這種情況下,他們將無法僅生成自己的 uuid,您可以非常有目的地將他們的 uuid 定位為對套接字事件進行速率限制/阻止它們。然而,這與首先使用他們的 IP 是一樣的。
我看不出有什么方法可以在不使用某些唯一識別符號(例如 IP 或 uuid)以及構建速率限制器服務器端的情況下實作您想要的。除此之外,您可以使用 cloudflare 之類的安全服務來為您限制速率,https: //blog.cloudflare.com/cloudflare-traffic/ ,您可以在其中對 auth 令牌進行速率限制,但我認為它如果您需要立即阻止事件,即使在第二次呼叫時也將不起作用(我不知道他們的規則是否允許該級別的配置)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/351277.html
標籤:javascript 节点.js 插座 socket.io 垃圾邮件预防
