「静的」URLが操作されないようにすることが目的の場合は、パラメーターを暗号化するか、署名するだけです。URLパラメータのMD5を、いくつかのソルトとともに追加するのは「十分に安全」である可能性があります。ソルトは、セッションに保存されているランダムな文字列にすることができます。
次に、次のことができます。
http://example.com/service?x=123&y=Bob&sig=ABCD1324
この手法はデータを公開します(つまり、xyz = 123を「見る」ことができます)が、データを変更することはできません。
「暗号化」には利点があります(そして私はその用語を大まかに使用します)。ここで、URLのパラメータセクション全体を暗号化します。
ここでは、次のようなことができます。
http://example.com/service?data=ABC1235ABC
暗号化を使用することの良いところは2つあります。
1つはデータを保護します(たとえば、ユーザーはxyz = 123を確認できません)。
他の機能は、拡張可能であるということです。
http://example.com/service?data=ABC1235ABC&newparm=123&otherparm=abc
ここでは、元のペイロードをデコードして、新しいデータと(安全に)マージすることができます。
したがって、リクエストは、既存のデータを変更するのではなく、リクエストにデータを追加できます。
署名手法を使用して同じことを行うことができます。リクエスト全体を単一の「blob」に統合するだけで、そのblobは暗黙的に署名されます。これは「効果的に」暗号化されており、弱い暗号化です。
明らかに、クライアントでこれを実行する必要はありません。意味がありません。あなたがそれを行うことができれば、「彼ら」はそれを行うことができ、あなたは違いを見分けることができないので、通常のHTTPポート(対TLS、しかし、そうすると人々は賢明に「なぜわざわざ」と思うでしょう。
Javaの場合、このすべての作業はフィルターで行われます。これが私が行った方法です。バックエンドはこれから分離されています。
必要に応じて、URLの暗号化/署名を処理するアウトバウンドフィルターを使用して、バックエンドをこれから完全に分離することができます。
それは私がしたことでもあります。
欠点は、それを正しく実行するために非常に関与していることです。URLを引き出すには軽量のHTMLパーサーが必要です(ページ全体をRAMにコピーしないように、その場で実行するストリーミングパーサーを作成しました)。
明るい面は、コンテンツの面のすべてが「正しく機能する」ことです。彼らはそれについて何も知らないからです。
また、Javascriptを処理する場合は、特別な処理がいくつかあります(フィルターは、暗号化するURLがどこにあるかを簡単に「認識」しないため)。これを解決するには、特定の「varsignedURL ='....'」でURLに署名する必要があるため、出力で簡単に見つけることができます。あなたが思うかもしれないほどデザイナーの負担を押しつぶすことはありません。
フィルタのもう1つの明るい面は、無効にできることです。「奇妙な動作」が発生している場合は、単にオフにします。動作が続く場合は、暗号化に関連するバグが見つかりました。また、開発者はプレーンテキストで作業し、統合テストのために暗号化を残すことができます。
やるのは苦痛ですが、最終的には全体的にいいです。