0

これはおそらく、ベテランの Web 開発者にとって非常に単純な初心者の質問ですが、私はそうではなく、グーグルで検索しても役に立ちません。

Heroku でホストされている非常に単純な webapp があります。そのコードはhereです。これには 2 つの JSP ページ、1 つのインデックス、1 つの検証結果があり、特別なものは何もありません。2 つの JSP ページはこちら (index.jsp)こちら (results.jsp)です。

問題は検証サーブレットにあります。これは POST であり、アプリ自体を使用するときに の入力ボタンを介してトリガーされindex.jspます。しかし、サーブレットを直接呼び出しても機能することをテストしました...そして、私はそれを望んでいません。

このサーブレットがインデックス ページから来るときにのみ呼び出されるようにする (それ以外の場合は 403 を送信する) ことを確実に保証する方法はありますか?

4

3 に答える 3

1

最初のページがロードされたときにフィンガープリント (UUID.randomUUID() など) を生成し、現在のセッションで値を保存できます。

結果を検証サーブレットに送信するときに、そのフィンガープリントを隠しフィールドとして含め、フィンガープリントがセッションに存在することを確認します。

于 2013-01-16T11:02:23.590 に答える
1

私が使用した 1 つの方法は、index.jsp の入力フォームに、results.jsp でも計算できる md5 ハッシュを含む隠しフィールドを含めることです。クライアント マシンの IP アドレスの md5 ハッシュを共有シークレット フレーズと連結して使用します。

特定のクライアント IP アドレスのハッシュは常に同じになるので、results.jsp による計算に含めるために別の非表示フィールドに渡される別の値 (現在の時刻など) でソルトすることもできます。

于 2013-01-16T10:50:10.290 に答える
0

それを 100% 確信できる方法はありません。最終的にリファラーを確認できますが、偽造することは可能です。また、index.jsp をロードするときに Cookie を設定し、サーブレットで値を確認することもできます。しかし、誰かが index.jsp をロードして Cookie を取得し、それを使用して検証サーブレットにポストすることも可能です。ハッシュで隠された入力についても同じことを考えてください。

于 2013-01-16T10:50:53.363 に答える