增加防止恶意创建空房间的机制

This commit is contained in:
zhl 2021-01-12 13:41:19 +08:00
parent f5b591b6f7
commit 3a6dde6eec
3 changed files with 31 additions and 2 deletions

14
package-lock.json generated
View File

@ -248,6 +248,15 @@
"@types/serve-static": "*" "@types/serve-static": "*"
} }
}, },
"@types/express-rate-limit": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@types/express-rate-limit/-/express-rate-limit-5.1.1.tgz",
"integrity": "sha512-6oMYZBLlhxC5sdcRXXz528QyfGz3zTy9YdHwqlxLfgx5Cd3zwYaUjjPpJcaTtHmRefLi9P8kLBPz2wB7yz4JtQ==",
"dev": true,
"requires": {
"@types/express": "*"
}
},
"@types/express-serve-static-core": { "@types/express-serve-static-core": {
"version": "4.17.13", "version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz",
@ -955,6 +964,11 @@
"lodash.set": "^4.0.0" "lodash.set": "^4.0.0"
} }
}, },
"express-rate-limit": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.2.3.tgz",
"integrity": "sha512-cjQH+oDrEPXxc569XvxhHC6QXqJiuBT6BhZ70X3bdAImcnHnTNMVuMAJaT0TXPoRiEErUrVPRcOTpZpM36VbOQ=="
},
"express-unless": { "express-unless": {
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz", "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz",

View File

@ -21,11 +21,12 @@
"devDependencies": { "devDependencies": {
"@colyseus/loadtest": "^0.14.0", "@colyseus/loadtest": "^0.14.0",
"@types/cors": "^2.8.6", "@types/cors": "^2.8.6",
"@types/debug": "^4.1.5",
"@types/express": "^4.17.1", "@types/express": "^4.17.1",
"@types/express-rate-limit": "^5.1.1",
"ts-node": "^8.1.0", "ts-node": "^8.1.0",
"ts-node-dev": "^1.0.0-pre.63", "ts-node-dev": "^1.0.0-pre.63",
"typescript": "^3.4.5", "typescript": "^3.4.5"
"@types/debug": "^4.1.5"
}, },
"dependencies": { "dependencies": {
"@colyseus/command": "^0.1.6", "@colyseus/command": "^0.1.6",
@ -38,6 +39,7 @@
"debug": "^4.3.1", "debug": "^4.3.1",
"express": "^4.16.4", "express": "^4.16.4",
"express-jwt": "^5.3.1", "express-jwt": "^5.3.1",
"express-rate-limit": "^5.2.3",
"fs-jetpack": "^4.1.0" "fs-jetpack": "^4.1.0"
} }
} }

View File

@ -3,6 +3,7 @@ import express from "express";
import cors from "cors"; import cors from "cors";
import {RedisPresence, Server} from "colyseus"; import {RedisPresence, Server} from "colyseus";
import { monitor } from "@colyseus/monitor"; import { monitor } from "@colyseus/monitor";
import rateLimit from "express-rate-limit";
// import socialRoutes from "@colyseus/social/express" // import socialRoutes from "@colyseus/social/express"
import { GeneralRoom } from "./rooms/GeneralRoom"; import { GeneralRoom } from "./rooms/GeneralRoom";
@ -45,6 +46,18 @@ gameServer.define('general_room', GeneralRoom);
// register colyseus monitor AFTER registering your room handlers // register colyseus monitor AFTER registering your room handlers
app.use("/colyseus", monitor()); app.use("/colyseus", monitor());
// 限制每2分钟最多连接 max次, 防止恶意的创建空房间
const apiLimiter = rateLimit({
windowMs: 2 * 60 * 1000, // 2 minutes
max: 20
});
app.use("/matchmake/", apiLimiter);
// 设置反向代理后, 须设置该值
// see https://expressjs.com/en/guide/behind-proxies.html
app.set('trust proxy', 1);
gameServer.onShutdown(function () { gameServer.onShutdown(function () {
console.log("master process is being shut down!"); console.log("master process is being shut down!");
//TODO:: 保存所有数据至db, 重启时恢复 //TODO:: 保存所有数据至db, 重启时恢复