0

.jspページに、パスワードをサーバーに送り返すフォームがあります。

<form name="login" action="j_security_check" method="post">
    <input type="text" name="j_username">
    <input type="password" name="j_password">
    <input type="submit" name="Login"> </form>

j_passwordを処理する前に、いくつかの処理を行いたいと思います。以前は、以下のような機能を実行する関数を呼び出すことで、いくつかの処理コードを介してJavaScriptを実装することでこれを行うことができました。

<script type="text/javascript" src="sha256.js">
<script> function hash() { document.login.j_password.value = '@' +
    sha256_digest(document.login.j_password.value); } </script>
...
...
    <input type="submit" value="Login" onClick="hash()"> </form>

今、私は同様の機能を実装しようとしていますが、JavaScriptを使用する代わりに、Javaを使用しようとしています。私の.javaの主な目的は、public.keyをロードし、j_passwordを取得し、暗号化を実行し、j_passwordを暗号化された形式に置き換えることです。

// RSA.java Pseudocode
1) Get string from textbox "j_password"
2) Load public key from public.key
3) Perform encryption on j_password with key
4) Load cipher to textbox "j_password"

ただし、私が見るほとんどの例では、「<%%>」呼び出しを実装していますが、これにより、ログインボタンをクリックするのではなく、ページの読み込み時に実行されるという印象を与えます。また、javacを使用して.classとしてコンパイルし、「」としてロードできることに気付きましたが、このメソッドを使用してj_passwordの入力を変更できますか?これは.jspであり、「<%%>」を使用してJavaを直接実装できますが、現在のJSP標準では受け入れられないと思います。誰かが私を正しい方向に向けるための推奨事項やアイデアを持っていますか?

ありがとうございました。

4

2 に答える 2

0

暗号化にフィルターを使用できますが、クライアント側では使用できません。そのリストからわかるように、目的に応じて、フィルターは暗号化にも使用されます。何かに介入する唯一の方法は、フィルターを使用することです。ただし、クライアント側の暗号化が必要な場合は、JavaScriptが唯一の方法です。

さらに、これこれを見ることができます。

2番目のリンクは、クライアント側でパスワードをハッシュするための適切な説明を提供します。答えの1つはこれに言及しています:

この問題に関して、より安全な認証プロトコルは通常、クライアントがパスワードと一緒にハッシュされるランダムなビットの束を選択できるようにすることで、そのようなリプレイ攻撃が機能しないことを確認するために、多くのフープを飛び越えます、およびサーバーに平文で送信されます。

サーバー上:

  • ランダムな数ビットを生成します
  • これらのビットを(クリアテキストで)クライアントに送信します

クライアントの場合:

  • いくつかのランダムビットを生成します
  • パスワード、サーバーのランダムビット、およびクライアントのランダムビットを連結します
  • 上記のハッシュを生成する
  • ランダムデータ(クリアテキスト)とハッシュをサーバーに送信する

サーバーは、自身のランダム情報とクライアントのランダムビット(クリアテキストとして取得)を認識しているため、基本的に同じ変換を実行できます。このプロトコルは、両方の当事者が毎回異なる「ノイズビット」を生成する限り、この会話を聞いている人が後で情報を使用して、記録された情報を使用して誤って認証することができないようにします(非常に弱いアルゴリズムが使用された場合を除く...)。握手が行われます。

于 2012-05-14T07:46:53.577 に答える
0

サーバーに送信するためのパスワードを暗号化しようとしていますか?その場合、処理はクライアントではなくサーバーで実行されるため、JSPを使用できません。

JSPはJavaを使用して動的Webページを構築する方法ですが、すべての処理ディレクティブはサーブレットに変換され、そこで通常のサーブレットのライフサイクルに従います。クライアントで暗号化する場合は、クライアント側の言語を使用する必要があります。SSLを使用して送信を配信/受信する場合、データの読み込みは自動的に暗号化されることに注意してください。

ストレージ用にDBに変換する場合は、フォームハンドラーに標準サーブレットを使用することもできます。

于 2012-05-14T07:47:09.450 に答える