算法:在python脚本中阻止无效的条目进入竞争

2024-09-30 22:10:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Android移动应用程序,其实只是一个日历,你可以点击某个日期,然后弹出一个秘密代码。用户使用该代码进入一个竞赛-他们跟随到竞赛HTML页面的链接(实际上是python脚本)并输入他们的详细信息以进入竞赛。有100个小奖和3个大奖。一个代码可以是未得奖的代码,也可以为用户赢得奖品(小的或大的)。在

所以它们将被重定向到:http://mycompetition.com/comp.py?code=ABCDEF

然后输入他们的年龄,代码和图片验证码(避免垃圾邮件发送者)并单击进入竞争。在

我的问题:我很难想出一个算法来确保人们不输入上面的URL,并为CGI的“代码”值输入一个随机的代码值,如果他们猜到了正确的代码(或者他们使用bot继续尝试),则会意外地赢得奖金。在

你能想出什么办法来避免那些没有购买应用程序的人只是去上面的网址输入随机代码和意外中奖?

我的算法/想法:
-有12个字符长的代码,这使得猜测代码的可能性非常小,但仍然有可能。我不擅长数学和概率,因此,如果我在代码中使用26个字符和10个数字作为潜在字符,这是否意味着在(36个字符*12个通行长度*103个奖品)中正确回答1个的概率?这种可能性是否只剩下超级计算机(我不相信有人会把超级计算机用于我的comp:P)来猜测代码?
-不要把奖品和密码联系起来。取而代之的是让android应用程序随机生成一些没有任何意义的代码&当他们参加比赛时,我只给他们随机的1/10000(我不希望有接近10000个参赛者进入comp)赢取奖金。要参加比赛,您必须输入您的年龄和代码,然后输入验证码以避免垃圾邮件发送者。
-你知道有没有更简单的算法可以避免没有购买应用程序的用户获得奖励?在

编辑: -什么时候下载应用程序,我看他们的手机(无线部分)MAC地址。在应用程序的第一次运行时,我将这个MAC地址上传到我的服务器,其中包含我的应用程序用户的MAC地址列表。当/如果他们发现密码,他们clikc enter competition&被重定向到http://mycompetition.com/comp.py?code=RANDOMMEANINGLESSGENERATEDCODE&uniqueID=USERSMACADDRESS。在我的脚本中,我检查uniqueID是否在下载我的应用程序的用户列表中,如果不是,我就不继续,如果是,他们有1/10000的机会获奖。你能看出这个算法有什么缺陷吗?在


Tags: 代码用户py脚本com算法应用程序http
1条回答
网友
1楼 · 发布于 2024-09-30 22:10:14

使用HMAC根据您在Android应用程序和站点之间共享的秘密生成代码。作为HMAC的文本,您可以使用随机值(包含在生成的代码中),也可以使用用户特有的值,例如他们的电子邮件地址(意味着每个用户只能有一个有效代码)。如果代码的长度很重要,可以截断HMAC生成的散列,但要记住,截断的时间越短,暴力攻击就越实际。在

只要你的秘密被你的用户随意地猜出来,你的秘密就不会被破解了。不过,由于代码运行在用户拥有的设备上,因此无法阻止他们从你的应用程序中提取代码。一个有根电话和反汇编程序的用户可以相对容易地做到这一点。为了解决这个问题,你可以混淆代码,发布新版本的应用程序,并在网站上更新密钥,只要你怀疑它被泄露了。在

最终,由于设备在用户的控制之下,没有办法完全阻止用户生成自己的代码,但是使用上面的方法,您可以使他们更加困难,也更容易从中恢复。在

相关问题 更多 >