Security 安全问题:如何保护从客户端返回到服务器的Hibernate集合?

Security 安全问题:如何保护从客户端返回到服务器的Hibernate集合?,security,hibernate,collections,merge,gilead,Security,Hibernate,Collections,Merge,Gilead,我有一个名为“Parent”的简单pojo,其中包含对象“Child”的集合 在hibernate/jpa中,它只是一对多关联,子对象不知道它们的父对象:这些子对象可以有不同类型的父对象,因此不知道父对象更容易(想想表示标记的子对象,父对象可以是具有标记的不同对象类型) 现在,我将我的父对象发送到我的网站的客户端视图,以允许用户修改它 为此,我使用Hibernate/GWT/Gilead 我的用户做了一些更改,然后单击save按钮(ajax),它将我的父对象发送到服务器。“我的父对象”的字段已修

我有一个名为“Parent”的简单pojo,其中包含对象“Child”的集合

在hibernate/jpa中,它只是一对多关联,子对象不知道它们的父对象:这些子对象可以有不同类型的父对象,因此不知道父对象更容易(想想表示标记的子对象,父对象可以是具有标记的不同对象类型)

现在,我将我的父对象发送到我的网站的客户端视图,以允许用户修改它

为此,我使用Hibernate/GWT/Gilead

我的用户做了一些更改,然后单击save按钮(ajax),它将我的父对象发送到服务器。“我的父对象”的字段已修改,但更重要的是,在集合中添加或删除了一些子对象

总之,当父对象返回到服务器时,其集合中现在有: -新的“子”对象,其中id为null,需要持久化 -修改的“子”对象,其中id不为null,需要合并 -可能被黑客攻击的“子”对象,其id不为null,但最初不属于父对象 -缺少(已删除)子对象:需要删除

如何保存父对象(及其集合)?您是否从数据库加载父集合以比较修改集合的每个对象,以查看是否没有被黑客攻击的项? 是否清除旧集合(以删除孤立项)并重新添加新子项(但有一些子项尚未修改)

谢谢


PS:对不起我的英语,我希望你已经理解了这个概念;)

堆栈中的某些内容必须提供您所谈论的逻辑,并且考虑到您的环境,可能是您自己。您必须从数据源读取对象的当前持久状态,以便进行比较。请记住,如果多个合法操作可以同时更新父对象及其集合,则必须非常小心地定义事务粒度和代码的线程安全性质

无论如何,这都不是一个简单的问题,可能有框架功能可以提供帮助,但我还没有找到解决我遇到的任何实际实现问题的方法,特别是在我有逻辑试图区分合法数据和“黑客”数据的情况下

你可以考虑改变你的体系结构,这样父和子就被保持在不同的动作中。在您的情况下,这可能不合适,但您可以通过拆分持久性操作来获得更细粒度的事务,并提供面向子级的安全性,从而使您的黑客问题更易于管理


祝你好运。我建议您在编写过多代码之前,先绘制一个详细的逻辑流程图。

堆栈中的某些内容必须提供您所谈论的逻辑,并且根据您的情况,可能是您自己。您必须从数据源读取对象的当前持久状态,以便进行比较。请记住,如果多个合法操作可以同时更新父对象及其集合,则必须非常小心地定义事务粒度和代码的线程安全性质

无论如何,这都不是一个简单的问题,可能有框架功能可以提供帮助,但我还没有找到解决我遇到的任何实际实现问题的方法,特别是在我有逻辑试图区分合法数据和“黑客”数据的情况下

你可以考虑改变你的体系结构,这样父和子就被保持在不同的动作中。在您的情况下,这可能不合适,但您可以通过拆分持久性操作来获得更细粒度的事务,并提供面向子级的安全性,从而使您的黑客问题更易于管理


祝你好运。我建议您在编写过多代码之前先绘制详细的逻辑流程图。

我找到的最佳解决方案是管理手动创建的DTO。DTO只向客户端发送所需的数据。对于我想在只读模式下设置的每个字段,我会根据我用dto发送给客户机的密钥计算签名

当我的DTO返回服务器时,我检查签名以确保我的只读字段没有更改(使用返回字段重新计算签名,并将其与使用DTO返回的签名进行比较)


它允许我指定只读字段,并确保我的对象未被黑客攻击。

我找到的最佳解决方案是管理手动创建的DTO。DTO只向客户端发送所需的数据。对于我想在只读模式下设置的每个字段,我会根据我用dto发送给客户机的密钥计算签名

当我的DTO返回服务器时,我检查签名以确保我的只读字段没有更改(使用返回字段重新计算签名,并将其与使用DTO返回的签名进行比较)


它允许我指定只读字段,并确保我的对象未被黑客攻击。

您好,谢谢您的回复;)我所有的函数都是事务性的,所以我没有损坏数据库的问题。你所说的一切正是我所想的;)在大多数使用过的情况下,我都尝试独立于父项(如您所说,这更干净、更容易保护)来持久化和合并子项,但在某些情况下,我不能(我的客户添加一个小标记,但我想等待他保存整个父项,而不是立即保存标记…)。这是一个难题……您好,谢谢您的回复;)我所有的函数都是事务性的,所以我没有损坏数据库的问题。你所说的一切正是我所想的;)在我的大多数使用案例中,我都试图坚持和改进