Hash 防止欺诈性提交计分板

Hash 防止欺诈性提交计分板,hash,flash,checksum,database-security,Hash,Flash,Checksum,Database Security,我正在为一个Flash游戏的后端工作,我需要保护进入记分板的数据 游戏将在多个网站上发布横幅广告,用户将在广告中玩游戏,然后点击主网站以保存其详细信息 目前我的想法是这样的 用户玩游戏并单击以提交分数 在后台,横幅将分数和原始域发送到主站点上的脚本 脚本检查域是否为承载ad的有效域之一 如果一切正常,脚本将创建此分数和域的散列,并将其存储在数据库中的分数旁边 脚本将散列返回Flash,并将其填充到打开主记分板的getURL的查询字符串中 记分板页面检查referer以确保它是有效域之一 如果是,

我正在为一个Flash游戏的后端工作,我需要保护进入记分板的数据

游戏将在多个网站上发布横幅广告,用户将在广告中玩游戏,然后点击主网站以保存其详细信息

目前我的想法是这样的

  • 用户玩游戏并单击以提交分数
  • 在后台,横幅将分数和原始域发送到主站点上的脚本
  • 脚本检查域是否为承载ad的有效域之一
  • 如果一切正常,脚本将创建此分数和域的散列,并将其存储在数据库中的分数旁边
  • 脚本将散列返回Flash,并将其填充到打开主记分板的getURL的查询字符串中
  • 记分板页面检查referer以确保它是有效域之一
  • 如果是,则检查数据库中的哈希值,以确定它是否为有效令牌
  • 然后用户填写他们的详细信息,并根据散列更新记录
  • 上次我检查FLash没有发送推荐信息,这有点妨碍了我的计划。那么,这种Flash/数据库交互是否已经有了一个既定的模式

    在步骤4中我应该使用哪种哈希/校验?这种操作的正确名称是什么,是散列、校验和还是其他什么

    我知道,作为客户端技术,Flash实际上永远不会那么安全,但在我看来,像上面这样的东西是很难破解这种应用程序的

    更新:我的主要目标是让人们更难找到将分数添加到数据库的脚本的URL,并简单地用假分数垃圾邮件发送它

    谢谢,
    Greg

    本质上,您不想验证分数是否来自合法客户,而是要验证客户是否实际玩过游戏以获得分数。从本质上说,你能期望的最好结果是人们被要求创建一个AI来玩游戏

    以下是一些您可以尝试的东西:

    • 将输入记录到游戏中,并将其与分数一起发送。然后,服务器可以验证分数是否与可能的游戏对应。您还可以通过这种方式检测重复提交
    • 应用速率限制来阻止客户以明显不人道的速度提交分数。根据实际可能达到的目标,对允许的分数设置上限,并对每秒的动作设置下限
    • 使用以前的输入部分地为伪随机数生成器设定种子(假设您使用了一个)。这使得客户端不太可能稍微更改提交内容,仍然获得有效的游戏/分数组合

    我以前在游戏行业工作过,并做过类似的事情。据我所知,从来没有人费心破解提交分数的部分

    这样做的方式是:

  • 生成一个随机数作为salt(来自flash)
  • 根据salt(来自flash)使用数学运算对分数进行编码
  • 添加校验和以确保分数上没有回火(来自flash)
  • 将分数和任何所需数据发送到分数提交页面
  • 在服务器上,使用校验和验证未调整分数
  • 如果分数有效,则将其插入数据库,否则,拒绝该分数
  • 如果您愿意,您可以记录违反校验和的分数提交者的ip地址(可能是三个错误校验和的策略,您已退出),并添加一个脚本,禁止他们访问服务器1小时,但这可能不是必需的,除非有人想破解您的代码
  • 注: 哈希/校验使用自定义函数进行。不需要非常安全的东西。这是通过计算盐和分数得出的。一些简单的数学运算,如和、乘和减


    编辑:校验和的简单算法/数学

    假设您的用户得分为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,你有校验和函数的链接或示例代码吗。干杯