Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器能否验证客户端应用程序以确保未进行任何代码更改?_Java_Security_Validation_Build_Client - Fatal编程技术网

Java 服务器能否验证客户端应用程序以确保未进行任何代码更改?

Java 服务器能否验证客户端应用程序以确保未进行任何代码更改?,java,security,validation,build,client,Java,Security,Validation,Build,Client,这可能是不可能的,但我希望我的服务器应用程序不仅要验证用户名和密码,还要验证客户端应用程序是否未被修改 我希望生成一个标识符,该标识符随每个构建而变化,但在同一构建的多个运行中保持不变 我试过: File jarFile = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()); int theID = jarFile.lastModified()); 但是当放置在不同的机器上

这可能是不可能的,但我希望我的服务器应用程序不仅要验证用户名和密码,还要验证客户端应用程序是否未被修改

我希望生成一个标识符,该标识符随每个构建而变化,但在同一构建的多个运行中保持不变

我试过:

File jarFile = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
int theID = jarFile.lastModified());
但是当放置在不同的机器上时,时间戳会发生变化


我想要一个生成私有ID的Validate.class。Validate.class被发送到服务器,服务器将Validate.class与其自己的类版本进行比较,然后验证类中包含的ID。这在理论上可行吗?或者

不可以。您不能这样做。客户机正在自己进行计算并将其发送到服务器。攻击者需要做的只是研究从合法客户端发送的内容,即客户端执行的硬编码值或计算,然后在自己连接到服务器时简单地重复该值或计算

不容易,因为你用来做这项检查的程序的任何部分都可能会撒谎说它通过了


您需要的是一个称为的功能,其中一些硬件/软件向第三方证明系统处于特定状态。实现这一点的唯一方法是使用一个名为a的硬件,但是,这将您的应用程序限制为运行某些版本的Windows或redhat linux的用户,以及使用硬件TPM的用户。简而言之,除非你为国家安全局写这篇文章,否则不值得

有动机的黑客可能会使用网络数据包嗅探器来分析发送到服务器的数据,并在一个全新的应用程序中模拟流量。这在本质上是不可能的。攻击者可以伪造任何他想要的东西。我认为雅虎的某个即时通讯工具曾经要求客户端提供一个它声称是的任何范围的分布式二进制文件的散列密钥。这本质上意味着分布式二进制文件必须包含在许可证禁止的任何开源重新实现中。你可以考虑类似的事情。@ Thorbj·RNRavaNordel森并没有使事情变得更加困难,因为一个新的、修改过的客户端可以简单地维护原始客户端的副本并计算请求的哈希值。你可以让想要修改/替换客户端的攻击者的工作变得更加困难,但你不能让它变得不可能事实上,在这里,维护原始客户端的副本并不会给攻击者带来任何真正的困难-有一些技术可以让这一点更加困难,例如在哈希计算中包含来自服务器的nonce,但是,一旦攻击者知道发生了什么,就很容易被击败。@jeffsix是的。这对于Java程序来说相对容易。这里的问题是,这是否足够好?你可能是对的。但是我认为通过只接受Validate.class中的值,即使黑客知道密钥,他们也必须将密钥硬编码到Validate.class中,当他们试图将该类发送到服务器时,这将导致异常。您假设客户端将发送它正在使用的实际类,而不是服务器期望的合法类。客户机/服务器安全的基本租户:攻击者总能发现客户机正在做的一切,并能在服务器交互中模仿它。