使用可让用户通过点击来呼叫某人的应用。通话结束后,将启动一项新活动FeedbackActivity,用户可以在其中输入有关他们所呼叫的人的上传反馈,服务器会随着时间的推移对数字进行处理并产生“评级”。
然而,该应用程序没有传统的“登录和密码”行为......(并且重要的是它没有这个)所以没有什么可以阻止用户一遍又一遍地恶意输入负面反馈......或者更糟糕的是,加载
http://www.example.com/feedback.php?personICalled=334875634&feedback=blahblahblah
进入浏览器,只是一遍又一遍地重新加载。
因此,我们需要确保人们只能对实际呼叫的人提供反馈。
我有想法在用户点击“通话”时将某种“令牌”发送到服务器。然后服务器保存此令牌。
然后,当他们随后上传反馈时,它看起来像:
http://www.example.com/feedback.php?personICalled=334875634&feedback=blahblahblah,&token=[same token sent prior]
这样,服务器检查是否保存了这样的令牌,如果是,则保存反馈,否则不保存。
或者,更好的是,可能存在仅为服务器(和应用程序)知道的秘密公式,其中[根据给出的反馈检查令牌]是[在电话呼叫时间上传的令牌]的(复杂数学)功能。
但是,显然对于某人来说,通过查看应用程序源代码,或者随着时间的推移观察y = f(x)关系并找出公式来解决这个问题并不困难...而且必须有这是一个更好的方法。
我读到了关于Diffie-Hellman密钥交换的内容......在我看来,必须有一种方法来实现这一目的...但我不是哈佛大学的毕业生而且已经有一段时间了离散数学......我对密码学并不是特别了解...而且wiki页面让我头疼!!!!
如果有人能告诉我“共同绘画”,“秘密色彩”,“公共交通”和“共同秘密”这两个术语如何转化为我的场景,我想我可能只能弄清楚这一点。
我猜测公共交通=互联网...我已经走得那么远了。
答案 0 :(得分:3)
首先,Diffie Hellman不会解决你的问题。在加密中有很多东西可能出错,所以除非你真的知道你需要它并且知道你想要它,否则不要玩它。
你真正的要求是什么?用户应该能够每次呼叫只输入一次反馈。你不需要加密来解决这个问题。
当用户拨打电话时,生成令牌。将该令牌发送给用户并将其存储在数据库中。通话结束后,允许用户“消费”#34;通过提供与该令牌相关联的反馈来提供令牌。服务器验证令牌是否存在于数据库中(并且尚未被使用)。假设它在那里,接受反馈,然后从数据库中删除令牌(它已被消耗)。如果不存在,请不要接受反馈。
您还可以通过使用令牌(生成令牌)存储时间来改进。如果他们试图过早消费,请不要让他们提供反馈。如果令牌在最长生命周期后没有消耗,则使令牌过期。这可以防止人们反复调用数据库(DoS)中无限期生活的用户或令牌。
您也可以通过IP地址限制人员。允许用户在任何合理的时间段(一天)内仅从IP地址接收一个评级。 IP地址可以与数据库中的反馈一起存储。