【发布时间】:2016-08-22 11:52:18
【问题描述】:
刚刚回顾了 Streams 和 Java 8 Lambda 功能,以及对原本不言自明的 Oracle 文档 Lambda Expressions 的最后评论指出:
你可以序列化一个 lambda 表达式,如果它的目标类型和它的 捕获的参数是可序列化的。然而,像内部类一样, 强烈建议不要对 lambda 表达式进行序列化。
检查这个我发现了 SO 问题
OP 正在处理来自客户端代码的序列化 lambda 表达式。
如果我有一个 web 服务并且其中一个参数是 lambda 表达式,它似乎可能包含恶意代码,这些代码可以执行诸如文件系统访问或导致堆栈溢出之类的事情 - 所以相信它是非常愚蠢的.
我是不是夸大了安全风险,还是对序列化表达式可以包含的内容有限制?
【问题讨论】:
-
请参阅this question 以获取示例。正如您在引用中已经指出的那样,内部类可能会引发类似的问题。不过,我不太确定如何在 Web 服务的上下文中传输 lambda 表达式。
-
为了清楚起见,序列化 lambda 表达式并不会序列化表达式内部的代码;只有捕获的参数之类的东西。
标签: java serialization lambda java-8