找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 161|回复: 9

关于服务器被人攻击报错的问题的一些解决方案

[复制链接]

5

主题

10

回帖

64

积分

小猫

积分
64
发表于 2024-7-4 13:18:10 | 显示全部楼层 |阅读模式
本帖最后由 nodiff 于 2024-7-4 13:19 编辑

1. 接受到 event.data 不为 string 的攻击时的报错
将:
  1. u.Server = {
  2.     address: "ws://localhost:8010/TestServer/server",
  3.     socket: null,
  4.     connect: function() {
  5.         e.address && (u.Server.address = e.address),
  6.         u.Server.socket = new WebSocket(u.Server.address),
  7.         console.log("正在连接至服务器..."),
  8.         u.Server.socket.onopen = function(e) {
  9.             u.Server.socket.onmessage = u.Server.onMessage,
  10.             u.Server.socket.onclose = u.Server.onClose,
  11.             u.Server.socket.onerror = u.Server.onError,
  12.             u.Server.onOpen(e)
  13.         }
  14.     },
  15.     onOpen: function(e) {
  16.         console.log("成功连接到服务器。"),
  17.         u.Event.call("ON_OPEN")
  18.     },
  19.     onMessage: function(e) {
  20.         u.Event.call("ON_MESSAGE", e.data)
  21.     },
  22.     onError: function(e) {
  23.         u.Event.call("ON_ERROR", e.data)
  24.     },
  25.     onClose: function(e) {
  26.         console.log("从服务器断开:" + e.data),
  27.         u.Event.call("ON_CLOSE", e.data)
  28.     },
  29.     send: function(e) {
  30.         u.Server.socket.send(e)
  31.     }
  32. };
复制代码
改为:
  1. u.Server = {
  2.     address: "ws://localhost:8010/TestServer/server",
  3.     socket: null,
  4.     connect: function() {
  5.         e.address && (u.Server.address = e.address),
  6.         u.Server.socket = new WebSocket(u.Server.address),
  7.         console.log("正在连接至服务器..."),
  8.         u.Server.socket.onopen = function(e) {
  9.             u.Server.socket.onmessage = u.Server.onMessage,
  10.             u.Server.socket.onclose = u.Server.onClose,
  11.             u.Server.socket.onerror = u.Server.onError,
  12.             u.Server.onOpen(e)
  13.         }
  14.     },
  15.     onOpen: function(e) {
  16.         console.log("成功连接到服务器。"),
  17.         u.Event.call("ON_OPEN")
  18.     },
  19.     onMessage: function(e) {
  20.         if (typeof(e.data) != 'string') {
  21.             console.log("u.Server.onMessage : e.data 不为 string, 已被拦截");
  22.             return;
  23.         }
  24.         u.Event.call("ON_MESSAGE", e.data)
  25.     },
  26.     onError: function(e) {
  27.         u.Event.call("ON_ERROR", e.data)
  28.     },
  29.     onClose: function(e) {
  30.         console.log("从服务器断开:" + e.data),
  31.         u.Event.call("ON_CLOSE", e.data)
  32.     },
  33.     send: function(e) {
  34.         u.Server.socket.send(e)
  35.     }
  36. };
复制代码



回复

使用道具 举报

5

主题

10

回帖

64

积分

小猫

积分
64
 楼主| 发表于 2024-7-4 13:23:42 | 显示全部楼层
1. 接受到 event.msg 不为 string 的攻击时的报错和长度过长的卡顿
将:

  1. O.prototype.onMessage = function(e) {
  2.     var t = e.msg
  3.         , n = "herobrine";
  4.     h.instance.playerMap["p" + e.uuid] && (n = h.instance.playerMap["p" + e.uuid].Player.playerName);
  5.     var r = n + ": " + t;
  6.     this.addMessage(r)
  7. }
复制代码

改为:
  1. O.prototype.onMessage = function(e) {
  2.     var t = e.msg
  3.         , n = "herobrine";
  4.     if (typeof(e.msg) != 'string') {
  5.         console.log("O.onMessage : e.msg 不为 string, 已被拦截");
  6.         return;
  7.     }
  8.     if (e.msg.length > 10000) {
  9.         console.log("O.onMessage : e.msg 长度过长, 已被拦截");
  10.         return;
  11.     }
  12.     h.instance.playerMap["p" + e.uuid] && (n = h.instance.playerMap["p" + e.uuid].Player.playerName);
  13.     var r = n + ": " + t;
  14.     this.addMessage(r)
  15. }
复制代码
回复

使用道具 举报

5

主题

10

回帖

64

积分

小猫

积分
64
 楼主| 发表于 2024-7-4 13:27:19 | 显示全部楼层
这些是我在 Elfive 服务器收到过的攻击,在这里最好拦截一下
回复

使用道具 举报

14

主题

64

回帖

1543

积分

小鱼干

积分
1543
发表于 2024-7-4 18:31:44 来自手机 | 显示全部楼层
额。。。。这是源代码?
。。。懒得写。。别看了
回复

使用道具 举报

5

主题

10

回帖

64

积分

小猫

积分
64
 楼主| 发表于 2024-7-5 17:58:24 | 显示全部楼层
难道没人吗
回复

使用道具 举报

5

主题

10

回帖

64

积分

小猫

积分
64
 楼主| 发表于 2024-7-6 19:26:57 | 显示全部楼层
真的没人吗?WTFGame不在吗
回复

使用道具 举报

39

主题

52

回帖

4072

积分

管理员

站长

积分
4072
发表于 2024-7-6 19:30:24 | 显示全部楼层

感谢你提供的bug反馈
我们会在服务器端做相应的拦截,尽可能避免修改前端代码
回复

使用道具 举报

5

主题

10

回帖

64

积分

小猫

积分
64
 楼主| 发表于 2024-7-6 21:24:06 | 显示全部楼层
首先,感谢您的回复!
另外,希望能在服务端加入像 elfive 服务器一样的反外挂系统(在接收到移动包的时候对uuid检查、对发包频率过大的用户封禁),也可以加入例如:
1. 对突然移动距离过大的用户统计次数,达到次数踢出或封禁(这个可能无法准确判断是否为外挂,可能为网速等种种原因)
2. 对短时间内推人次数过多的用户统计次数,达到次数踢出或封禁

如果没有这些机制的话希望服主可以选择性加入

回复

使用道具 举报

5

主题

10

回帖

64

积分

小猫

积分
64
 楼主| 发表于 2024-7-6 21:59:56 | 显示全部楼层
另外,还有一个问题:客户端的javascript中调用的语音接口依旧是tts.baidu.com,这个接口现在不能用了,可以参考老服务器和测试服,改用网易的接口,就是把
  1. "http://tts.baidu.com/text2audio?lan=zh&pid=101&ie=UTF-8&idx=1&tex="+encodeURI(e)+"&per="+t%4+"&ctp=1&cuid=1&pdt=1"
复制代码
改为
  1. 'https://dict.youdao.com/dictvoice?audio=' + encodeURIComponent(e) + '&le=zh'
复制代码


并且要使用的是encodeURIComponent,因为只使用encodeURI会出现比如"你好&le=us"会被解析为语言为英文,甚至可能存在潜在的攻击风险。
回复

使用道具 举报

5

主题

10

回帖

64

积分

小猫

积分
64
 楼主| 发表于 2024-7-6 22:00:30 | 显示全部楼层
本帖最后由 nodiff 于 2024-7-6 22:38 编辑

还在吗?还在吗?还在吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|WTFBBS

GMT+8, 2024-10-25 13:19 , Processed in 0.094363 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表