正在开发一个允许用户通过单击某人来呼叫某人的应用程序。呼叫之后,将启动一个新的活动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页面使我头疼!!!
如果有人能告诉我“普通涂料”,“秘密色彩”,“公共交通”和“普通机密”这些术语对我的情况有何影响,我想我也许可以弄清楚。
我猜公共交通=互联网...我已经走了这么远。
首先,Diffie Hellman不会解决您的问题。加密中有很多事情可能出错,因此除非您真的知道自己需要密码并且知道想要做什么,否则不要玩它。
您的真正要求是什么?用户每次呼叫只能输入一次反馈。您不需要加密即可解决此问题。
用户拨打电话时,生成令牌。将该令牌发送给用户,并将其存储在数据库中。通话结束后,通过提供与该令牌关联的反馈,允许用户“使用”该令牌。服务器验证令牌是否存在于数据库中(并且尚未被使用)。假设它在那里,接受反馈,然后从数据库中删除令牌(令牌已被使用)。如果不存在,请不要接受反馈。
您还可以通过使用令牌存储时间(令牌生成的时间)来改善性能。如果他们尝试过早使用它,不要让他们提供反馈。如果令牌在一定的最大使用期限后没有被使用,则使令牌过期。这样可以防止人们重复呼叫无限期存在于您的数据库(DoS)中的用户或令牌。
您可能还会通过IP地址限制人员。在任何合理的时间段(一天)中,仅允许用户从IP地址接收一个评分。IP地址可以与反馈一起存储在数据库中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句