停止操纵用于数据收集的变量?

时间:2012-06-11 05:03:43

标签: java protection

我正在研究java中的一个项目,我希望能够从客户端收集统计数据,并且我担心可能出现的问题是操纵用于收集的变量会导致非法统计。是否有可能阻止对变量的操纵或者总是可能的?

例如:我想记录每小时从客户端执行的操作。作为所执行动作量的计数器的变量被操纵,并且向计数器添加更大量的变量。然后将这些数据上传到服务器(当然使用多层架构来防止更多可能的问题)并被认为是“合法的”。

有没有办法阻止这种情况?

2 个答案:

答案 0 :(得分:1)

根据数据的上传方式,有多种方法可以保护信息。

如果要上传某种文本或数据文件,使用基本加密,即使是带密码的ZIP,也足以阻止临时用户更改信息。

您的应用程序也可以简单地使用RMI或Web服务上传信息,从不向用户提供操作数据的更改。

所有这一切当然都假定应用程序本身收集信息 - 如果用户有机会输入数据,就没有真正的方法可以阻止他们向您提供虚假信息。

如果不知道这是桌面应用程序还是Web应用程序,我建议您以某种方式加密上传文件。它不一定非常复杂,只需要有人不能在文本编辑器中编辑它。

请记住,如果在客户端计算机上运行某些内容,则可以对其进行操作。 Java本身并不是一种安全的语言,就此而言,虽然你可以做很多事情来保护应用程序,但总有一些人会更聪明,可以破解它。

答案 1 :(得分:0)

如果我这样做,我会在安全机器上积累统计数据。让主数据收集代码向累加器发送“事件”消息,并使累加器记录原始事件及其到达时间戳。这不会阻止人们操纵统计数据,但事后可以更容易地检测出可疑模式。

基于这个想法,您可以安排事件生成器应用程序(在用户的计算机上)使用某种涉及共享密钥或公钥/私钥加密的握手。我认为你不能完全确保这一点,但是默默无闻的安全性可能足以应对那些没有反向工程代码技能的人作弊的尝试。

但是像Ewald所说,任何算法流程都可以由对其运行的硬件有足够控制权的人进行逆向工程。如果该过程需要使用“秘密”进行操作,则可以揭示该秘密。