前端加密代码有什么好办法不被破解

愚蠢的小葱
  • 243

做一个微信小游戏,游戏结果积分抽奖。但是不想被用户不玩直接提交结果。js代码又是开源的,要怎么处理。

回复
阅读 15.9k
9 个回答
✓ 已被采纳
  • 用户请求网页时,在服务器生成一个唯一的UUID
  • 用户提交抽奖后提交该UUID
  • 服务器计算时间差,取不到UUID或者低于一个时间阀值的肯定是作弊的

最好说还是要登录状态下,还能限制次数等

之前做过类似的手游。当时处理的思路是这样的。
整个网站是https的,自带检测手机UA和触摸屏(尽可能防止PC模拟),页面里面的js混淆,跟服务器互动都用可逆的加密算法。
开始游戏之前向服务器申请加入游戏。服务器返回唯一的token作为本局游戏的ID。
因为我们的那个小游戏有涉及一些触摸的行为,在游戏过程中会将行为存好,结束游戏后将token、分数还有行为数据传上服务器。
至于怎么判断有没有作弊,无非就是检查时间差还有行为能否得到最后结果。
最后结果返回。
不过游戏中“行为”比较少,服务器负担得起。如果想节省成本可以选择不即时处理行为,等到稍空闲的时候处理,然后后台处理废除作弊用户的记录。
你的抽奖部分一定是要后台判定游戏完成才允许有这个token的用户抽,这个你懂的。

理论上是不可能的,脚本型的语言,解析器总是要解析的嘛。和天猫的一样,抽奖逻辑放服务端,只返回结果。至于用户想直接提交,这个没办法,别人不看js代码,抓包也能做到。你可以在服务端限制时间间隔,提交太快就不处理。

抽奖逻辑放在服务端,如果有的话。

个人建议你把js使用压缩软件进行混淆压缩,这样别人就算拿了你代码,也无法解密出来的。
还有建议是前端的js控制游戏过程,服务器端控制游戏结果。这样比较安全。

前端是没办法做到百分百加密的,如果加密了浏览器就识别不了没法解析了,所有只能做压缩混淆,这只是将多余的符号(如空格...)去掉,还有将变量名变成简单的英文字母而已,本质还是没有加密的

就算JS加密了,发起的请求也可以直接被抓包到。
所以一定要通过服务器作限制。
客户端永远是不可信任的。

前端加密一般会被反解密出来,况且加密得客户端浏览器能解析才行。服务器端结合能保护部分。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏