セキュリティの質問:Hibernateのコレクションを確保する方法をクライアントからサーバに戻ってきますか?

StackOverflow https://stackoverflow.com/questions/2161149

質問

私はオブジェクト「子」のコレクションが含まれている「親」という名前のシンプルなPOJOを持っています。

休止状態/ JPAでは、子どもたちが自分の親を知らない、単純に1対多の関連です:それは簡単に親を知らないためにように、これらの子オブジェクトは、親の異なるタイプを持つことができます(タグを表している子供を考えると、両親はタグを持つ異なるオブジェクトタイプ)をすることができます。

さて、私は、ユーザーがそれを変更できるように自分のWebサイトのクライアントビューに私の親オブジェクトを送信します。

それについて、私は、Hibernate / GWT /ギリアドは使用しています。

私のユーザーは、いくつかの変更をmades、サーバに私の親オブジェクトを送信ボタン(アヤックス)[保存]をクリックします。私の親のフィールドが変更されますが、より重要な、いくつかの子供は、オブジェクトされている追加またはコレクションで削除されています。

親オブジェクトがサーバーに戻ってくるに要約は、それが今ではコレクションにあります。 - idがnullでかつ持続する必要がある新しい「子」オブジェクト - idがヌルとマージする必要はありませいる修正された「子」オブジェクト - 潜在的にIDがnullでない「子」オブジェクトをハッキングもともと親が所有していません - 子供が(削除)欠落しているオブジェクト:削除された

ことの必要性 あなたは親オブジェクト(およびそのコレクション)をどのように保存するのですか?あなたは何もハッキングされた項目がないかどうかを確認するために変更され、コレクションの各オブジェクトを比較するために、データベースから親コレクションをロードしていますか? あなたは(削除孤児への)古いコレクションをクリアして再新しい子を追加しています(ただし、変更されていないいくつかの子供があります)?

感謝

PS:私の英語のため申し訳ありませんが、私はあなたが概念を理解している願っています;)

役に立ちましたか?

解決 2

私が見つけた最良の解決策は、手動で作成DTOを、管理することです。 DTOは、クライアントにのみ必要な件のデータを送信します。私は読み取り専用モードに設定したい各フィールドについて、私は私が私のDTOをクライアントに送信することを秘密鍵に基づいて署名を計算します。

私のDTOがサーバーに来るとき、私は私の読み取りフィールドのみが変更されていないことを確認するために署名をチェックする(来バックフィールドを持つ署名を再計算し、それがDTOと戻って来て、署名と比較)

これは私が読んフィールドのみを指定して、私のオブジェクトがハッキングされていないことを確認することができます。

他のヒント

あなたのスタック内の何かが、あなたが話しているロジックを供給しており、それはおそらくあなたは、あなたの状況与えられました。あなたは、比較を行うことができますので、あなたのデータソースから読み取ることによって、オブジェクトの現在の永続化の状態を取得する必要があります。ベアいくつかの合法的な行動があなたの親オブジェクトとそのコレクションを更新することができれば、同時にあなたのトランザクションの穀物とあなたのコードのスレッドセーフな性質を定義する上で細心の注意を払う必要があります、ということを念頭に置いています。

これは任意の手段によって、単純な問題ではありません、よく支援できるフレームワークの機能があるかもしれませんが、私は私が試したのロジックを持っている、特に場合は、私が遭遇したすべての現実世界の実現のためにこれを解決したものを見つけるために、まだ午前正当と区別するために「ハッキング」データます。

あなたは、親と子が別のアクションに永続化されていることを、あなたのアーキテクチャは、このような変更を検討してください。それはあなたの場合には適切ではないかもしれませんが、あなたは永続アクションまで分割することによって、トランザクションの細かい木目を持っているし、少しより管理ハッキングの問題を作る子供向けのセキュリティを提供することができるかもしれません。

幸運。私はあなたがあまりにも多くのコーディングない前に、あなたのロジックの詳細なフローチャートを描くお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top