刚刚介绍了Streams和Java8 Lambda功能,最后对不言自明的Oracle doc Lambda表达式的评论指出:
如果lambda表达式的目标类型及其捕获的参数可序列化,则可以序列化该表达式。然而,与内部类一样,强烈反对lambda表达式的序列化。
检查这个我发现了SO问题
如何序列化lambda?
其中OP处理来自客户端代码的序列化lambda表达式。
如果我有一个webservice,其中一个参数是lambda表达式,那么它似乎可能包含恶意代码,可能会执行文件系统访问或导致堆栈溢出等操作,因此信任它是非常愚蠢的。
我是否夸大了安全风险,或者序列化表达式可以包含的内容有限制?
Oracle Java SE安全编码指南中的建议之一是
准则8-3/SERIAL-3:视图反序列化与对象构造相同
本质上,将应用于构造函数参数的相同验证检查也应应用于传入的反序列化数据。通过提供执行验证的方法,可以对普通对象执行此操作。但是,无法为序列化的lambda提供readObject方法,因此无法对lambda的序列化数据执行任何验证。
序列化lambda与普通对象的序列化共享所有安全风险,但在这方面,序列化lambda比普通可序列化对象面临更广泛的安全风险。
让我们这样说吧:Java对象序列化(在某种程度上)无论如何都是一场安全噩梦(参见这里的示例)。
换句话说:序列化本身是一个首先需要深思熟虑的话题。所以你是否谈论序列化lambdas或任何其他类型的序列化对象并不重要。
因此,例如,您希望确保您理解并支持相应的规则,例如来自CERT的规则。
虽然可以在Java 8中序列化lambda,但强烈建议不要这样做;甚至不鼓励序列化内部类。给出的原因是lambdas可能无法在另一个JRE上正确反序列化。然而,这是否意味着有一种方法可以安全地序列化lambda? 例如,假设我定义一个类如下: 如果像这样声明了类的实例,则不应序列化它: 但如果我创建一个这样的类实例,会怎么样: 现在序列化是安全的吗?我的直觉告诉我,是的,它应该是安全的,因为没有理
问题内容: 在许多地方,我已经看到人们谈论过跨域XMLHttpRequest,由于某些 安全原因 ,这是不可能的。但是,我还没有找到表明这些 安全原因 实际上是什么的帖子? 人们提到JSONP是不错的选择之一。另一种选择是使用和标头。 但是,我只想知道由于跨域XMLHttpRequest的使用会引起哪些安全问题? 问题答案: 我认为最好回答您的问题的示例,为什么这太糟糕了。 您转到我的网站(exa
本文向大家介绍Dubbo支持哪些序列化方式?相关面试题,主要包含被问及Dubbo支持哪些序列化方式?时的应答技巧和注意事项,需要的朋友参考一下 默认使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
本文向大家介绍Python中 Lambda表达式全面解析,包括了Python中 Lambda表达式全面解析的使用技巧和注意事项,需要的朋友参考一下 什么是Lambda表达式 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函
我有这个代码: ……Resharper的检查抱怨道,“因为没有等待此调用,所以在调用完成之前继续执行当前方法。请考虑将‘wait’运算符应用于调用结果”(在注释行)。 所以,我在它前面加了一个“等待”,但当然,我也需要在某个地方加一个“异步”——但在哪里呢?
用于SQLAlchemy查询结构的序列化程序/反序列化程序对象,允许“上下文”反序列化。 任何基于sqlAlchemy.sql的sqlAlchemy查询结构。 或sqlacalchemy.orm。 可以使用。结构引用的映射器、表、列、会话等不以序列化形式持久化,而是在反序列化时与查询结构重新关联。 用法与标准python pickle模块的用法几乎相同: from sqlalchemy.ext.s