我目前正在使用html5 canvas和websockets构建一个带有游戏的网页.我有一个在服务器上运行的perl编写的websocket服务器:3000.在服务器上我还安装了apache,并创建了一个用户可以访问的网站:http:// server /.此页面上的javascript为ws:// server:3000创建一个websocket
连接工作,我可以从我的浏览器发送消息并获得响应,现在在div中显示所有内容.我发送的消息现在只是"消息:...",因此服务器知道它是一条消息,并向当前连接到"游戏"的所有用户输出"...".
现在的问题是,任何人都可以编写自己的客户端,连接到ws:// server:3000并发送/接收相应的消息.这样他们就可以使用我的后端,但不是我的客户端(我希望他们只能从http:// server /中播放).
如何确保仅使用我的客户端?主要担心的是作弊.您可以编写一个连接到端口的机器人,通过发送消息并解释它收到的消息来为您播放...如何克服这个问题?
网络的本质使得这种事情(对于黑客来说)变得更容易,而对于那些构建应用程序/网站的人来说则变得更加困难。通常,您会使用“引用者”来确保请求来自您的网站/域。它不是万无一失的,但适用于大多数情况。
在 Html 5 中,我知道超链接不必发送引用者。这可能会改变以包括网络套接字等。
即使您要使用某种盐来加密您的消息并将其哈希值与您的消息一起发送以根据服务器上的哈希值验证消息,您的客户端代码也可能对任何人可用且可见,因此他们可以破解你的逻辑。
WebSocket 规范一直在不断变化。某些浏览器暂时禁用或删除了 WebSocket 支持。
WebSocket 握手协议(使用 Sec-WebSocket-Key1 和 Sec-WebSocket-Key2)本应使事情变得安全,但此规范不适用于大多数代理服务器。您可以在此处阅读规范 http://www.whatwg.org/specs/web-socket-protocol/
请注意,握手协议的引入是为了一个非常不同的目的。这不是您想要的,而是为了防止客户端攻击服务器,除非服务器通过握手进行响应,否则客户端无法与服务器通信。但在你的情况下,你需要在不认识客户的情况下通过握手来回应。
所以我认为还没有一种可靠的方法来满足您的需要。
| 归档时间: |
|
| 查看次数: |
18885 次 |
| 最近记录: |