34 lines
2.4 KiB
Markdown
34 lines
2.4 KiB
Markdown
---
|
|
front:
|
|
hard: 入门
|
|
time: 20分钟
|
|
---
|
|
|
|
# 服务端与客户端
|
|
|
|
## 永远不能相信客户端
|
|
|
|
有人说, 从游戏行业诞生的那一刻, 也是游戏反作弊诞生的那一刻.
|
|
客户端给的数据不能轻易相信. 在开发插件时一定要注意, 如果你的插件要接收某个信息, 这个信息不是你自己指定的, 而是服主设置配置文件自己设定的或者是客户端发来的, 那你一定要仔细思考, 多加留意.
|
|
|
|
早前在GitHub上, 一个来自俄罗斯的账户发布了一个作弊MOD.
|
|
这款作弊MOD的作者研究了各大主流MOD的协议包漏洞, 发现这些知名的MOD的协议包或多或少在接收到玩家客户端数据时, **对玩家客户端发来的数据的合理性判定极度缺失, 甚至是根本没有**.
|
|
(不恰当的比方)玩家客户端说自己有一百万个钻石, 服务端真的就认为玩家客户端有一百万个钻石. 因此, 这款作弊MOD针对主流的大MOD的这些协议包问题, 有针对性的对每个MOD都开发了作弊方案.
|
|
|
|
可见开发者对客户端的警惕意识有多么重要.
|
|
|
|
我们要编写的是服务端插件.
|
|
服务端插件根本上面向于这一服务器的玩家, 最直接的使用者是这一服务器的服主. 那么, 服主能不能正确配置配置文件? 玩家的数据信息真的正确吗?
|
|
也许你说, 你写的又不是反作弊插件, 不可能做到处处提防玩家. 诚然如此, 但是警惕意识绝对不能丢.
|
|
|
|
**先虑忧患, 享于安乐.**
|
|
|
|
## 理清楚客户端和服务端的关系
|
|
|
|
如果你有经验你应该知道, 装上`Resdience`插件后, 创建一个领地, 关闭领地所有玩家的移动权限, 把一个玩家扔进去, 玩家在里面试图移动的话, 效果并不是完全动不了, 而是玩家仍然可以运动, 但是在一个间隔时间之后会被“弹回来”. 这是为什么?
|
|
|
|
为什么最终的效果不是"玩家一点都动不了"呢?
|
|
|
|
事实上, 我们无法在服务端取消玩家一点也不能移动. 客户端移动玩家时, 会在客户端显示出移动后的样子, 然后才会传递给服务器玩家移动的信号, 服务端收到客户端的信号后, 服务器才会做出响应.
|
|
|
|
也就是说, 客户端与服务端之间, **客户端往往都是"先斩后奏"的**. 客户端不管你服务端想干什么, 先那么显示出来再说. 因为毕竟玩家在服务器里完全动不了不是MC原版的设定之一. |