在游戏 (HTML5/Flash/Silverlight) 中,将数据发送到在线服务以记录进度(例如玩家杀死了一个兽人),通过 SSL 与服务通信是否会隐式阻止玩家记录和重放消息?我知道 SSL 包含一个随机数,但它在连接期间保持不变还是在每个请求/响应周期后都会发生变化?
答案1
nonce 位于传输层,而不是应用层。如果玩家捕获 TCP 数据包并尝试重放,SSL 只会阻止重放。但在 HTTP 级别的浏览器中,用户只需刷新页面即可轻松创建新请求……
答案2
不会,因为用户可以使用代理来解密以任何方式发送的数据,并且该代理将显示所有请求和所有响应。他会了解到杀死 Orc 时发送的请求是这样的GET /killed/orc
,他可以从浏览器或 Curl 发送该请求。然后他可以编写一个脚本,使用简单的 bash 循环杀死 Orc 100 次。
你至少需要检查你确实派了一个兽人让他杀。可能要给那个兽人一个唯一的标识符,这样在最坏的情况下,用户只能杀死你实际派来的东西。