现在,作为一个.jar文件,我们可以打开它,并使用任何反编译器查看代码和类。现在假设以下情况:
我在JAVA下开发了一个Client-Server应用程序,在Client和Server中,我都使用AES-256加密通过internet发送的数据。所以,我把“客户”交给我的朋友。现在.。问题是..。他能破解我的服务器,知道这些数据包是如何在客户端接收、处理和发回的吗?我是说..。加密数据时,当你有一个显示的代码,它是..。徒劳无功,不是吗?
问题是..。我怎样才能在服务器中拥有尽可能好的安全性?在这种情况下加密有效吗?
谢谢!
发布于 2013-08-21 18:32:24
不要使用加密只是为了隐藏客户端-服务器协议的工作方式。如果您希望您的服务器是安全的,即使客户端完全控制所发生的事情,也要使其安全。
正如您已经提到的,控制客户机很容易:不仅是通过反编译,还可以通过在调试器中运行客户机(它可以修改任何对象的内容,修改控制流等等)。
那么,我的观点是:
发布于 2013-08-21 18:37:43
如果他攻击你的服务器--你指的是他--意思是弄清楚进入的数据包的协议和内容,然后发送奇怪的数据包,让你的服务器在意想不到的时候做意想不到的事情,那么解决方案似乎不是加密,而是强大的验证。也就是说,在协议的每一步,您的服务器应该只期望在传入的数据包中有一组有限的值,如果一些传入的数据包不符合这个/尝试做一些意想不到的事情,那么它们应该被丢弃。
发布于 2013-08-21 18:39:22
您的加密不会允许您隐藏客户端和服务器用来相互通信的协议/API/等。通过对客户端和服务器之间的数据流进行加密,可以防止有人在通过网络(想必是互联网)时观察到这种通信量。
要记住的一个问题是,AES需要一个客户端和服务器都知道的密码。如果您的密码是硬编码在jar中,那么拥有jar的任何人都可以窥探到服务器与连接到jar的任何客户端之间的任何通信量。因此,客户端和服务器需要一种安全的方式来商定用于给定连接的密码。
我建议使用基于SSL的技术来加密线路上的数据(例如,您可以简单地使用HTTPS作为您的协议)。或者使用公钥加密。
考虑到客户端和服务器之间的通信模式缺乏信息,很难提出具体的建议。
https://stackoverflow.com/questions/18365012
复制相似问题