Hash 防止欺诈性提交计分板
我正在为一个Flash游戏的后端工作,我需要保护进入记分板的数据 游戏将在多个网站上发布横幅广告,用户将在广告中玩游戏,然后点击主网站以保存其详细信息 目前我的想法是这样的Hash 防止欺诈性提交计分板,hash,flash,checksum,database-security,Hash,Flash,Checksum,Database Security,我正在为一个Flash游戏的后端工作,我需要保护进入记分板的数据 游戏将在多个网站上发布横幅广告,用户将在广告中玩游戏,然后点击主网站以保存其详细信息 目前我的想法是这样的 用户玩游戏并单击以提交分数 在后台,横幅将分数和原始域发送到主站点上的脚本 脚本检查域是否为承载ad的有效域之一 如果一切正常,脚本将创建此分数和域的散列,并将其存储在数据库中的分数旁边 脚本将散列返回Flash,并将其填充到打开主记分板的getURL的查询字符串中 记分板页面检查referer以确保它是有效域之一 如果是,
Greg本质上,您不想验证分数是否来自合法客户,而是要验证客户是否实际玩过游戏以获得分数。从本质上说,你能期望的最好结果是人们被要求创建一个AI来玩游戏 以下是一些您可以尝试的东西:
- 将输入记录到游戏中,并将其与分数一起发送。然后,服务器可以验证分数是否与可能的游戏对应。您还可以通过这种方式检测重复提交
- 应用速率限制来阻止客户以明显不人道的速度提交分数。根据实际可能达到的目标,对允许的分数设置上限,并对每秒的动作设置下限
- 使用以前的输入部分地为伪随机数生成器设定种子(假设您使用了一个)。这使得客户端不太可能稍微更改提交内容,仍然获得有效的游戏/分数组合
编辑:校验和的简单算法/数学 假设您的用户得分为5885
您将生成一个随机数,作为134789(恒定长度,用0填充) cryptedScore=Score*Salt(您应该在这里使用更复杂的内容,但它只是一个示例) 在我们的示例中,加密分数为:793233265 现在,对于校验和,假设您希望将值253作为校验和。
您将加密分数的所有数字相加7+9+3+2+3+3+2+6+5=40 现在,计算此分数的校验和值
253-(加密分数的总和%253) 现在,我们有以下数字:
盐=134789
加密分数=793233265
校验和=40 您向服务器发出请求,将134789793233265040作为分数发送 在score server上,您可以将793233265除以134789得到5885,并使用与前面相同的函数验证校验和 如果校验和失败,则数字已被篡改
你可能会得到更安全的东西,但它应该可以做到。干杯,Martin,你有校验和函数的链接或示例代码吗。干杯