如果我通过网络发送序列化对象,如何保护序列化对象?我怀疑黑客可能会中断/破解我的数据。
谁能详细说明如何实现这一点?
本演示文稿提供了有关攻击者如何有效地篡改 Java 序列化流的想法:
https://www.owasp.org/images/e/eb/OWASP_IL_2008_Shai_Chen_PT_to_Java_Client_Server_Apps.ppt
如果服务器的类路径中存在易受攻击的类,还存在注入意外行为和注入代码的风险。见这篇文章:
[前瞻Java反序列化][3]
java.crypto.SealedObject
就是你要找的。
您可以对其进行加密或散列,但 java 序列化格式是通过网络发送的最佳选择 - 更好的解决方案是 JSON / XML(加密或使用某些加密算法签名)
如前所述查看加密,但更具体地查看用于 java 中网络通信的 hte SSL/TLS 库。
http://juliusdavies.ca/commons-ssl/ssl.html
当 Java 内置了一个非常强大的库时,无需尝试实现安全加密通信。
在我看来,您可以使用 useSSLSocket
或SealedObject
. 但是,它会让你的事情变得有点沉重。但是,本文也描述了其中一个选项。http://www.ibm.com/developerworks/library/j-5things1/
您可以使用签名对象和密封对象来保护序列化对象
我在这里的线程中添加了一个有用的资源,Oracle 的Java SE 安全编码指南(特别是在这种情况下,指南中的第 8 节,“序列化和反序列化”):
https://www.oracle.com/java/technologies/javase/seccodeguide.html#8