0

Java (JSF 1.2) で記述された WebApplication を開発しており、新しいブラウザ ウィンドウで (他のドメインの) 他のサード パーティの WebApplication を開く新しい機能を実装する必要があります。フォーム POST リクエストを使用して、このサード パーティの WebApplication にログインする必要があります。私のアプリケーションのユーザーには、このサードパーティの Web アプリケーションにログインするボタンのみが表示されます。問題は、Web アプリケーションのユーザーが、このサード パーティ システムにログインしている資格情報を認識できないことです。

これは、この問題に対する私の最初のダミーの解決策です。

JavaScript とボタンを追加しました。

<script type='text/javascript'>
  function login(username, password) {
    var action = "https://some.portal.at.other.domain/login.jsp";
    var data = "";
    data = data + "<form name='loginform' action='" + action + "' method='post'>";
    data = data + "  <input id='username' name='username' type='hidden' value='" + username + "' />";
    data = data + "  <input id='password' name='password' type='hidden' value='" + password + "' />";
    data = data + "</form>";
    data = data + "<sc" + "ript type='text/javascript'>";
    data = data + "  document.loginform.submit();";
    data = data + "</sc" + "ript>";
    newWindow=window.open("", "_blank");
    newWindow.document.write(data);
    newWindow.document.close();
  }
</script>

...

<a4j:commandButton id="Login"
                   value="Login"
                   onclick="login('#{user.login}', '#{user.password}')"/> 

これは魅力のように機能しますが、... ブラウザーで html ソースを表示すると、次のように表示されます。

<input id="form:Login" name="form:Login" onclick="login('john', 'secret')" value="Login" type="button" />

ページがレンダリングされるときにJSFが #{user.login} と #{user.password} を評価するため、セキュリティが壊れています:)

私の質問は次のとおりです。この機能を何らかの方法で保護することは可能ですか?

誰かが FireBug や WireShark のようなツールを持っていれば、この POST リクエストを必要に応じて簡単に見ることができることを私は知っているので、これは一般的に保護できないと感じています。単純にページのソースを表示するだけでなく、破るのに多くの労力が必要になるように、これを保護したいと考えています。

私は次のようなことをすべきだと思います:サーバー側で生成されたこのJavaScriptを返し、このJavaScriptを評価するonclickでいくつかのajaxリクエストを実行しますが、これを行う方法が正確にはわかりません。

だからみんな私にアドバイスを送ってくださいありがとう

4

1 に答える 1

2

このタイプのプロセスを保護する唯一の方法は、サーバー側で実行することです。つまり、ログインがクライアント側で行われている場合、クライアントはログインで使用されるすべての資格情報に完全にアクセスできると想定する必要があります。

クライアント側のリクエストが必要であるが、秘密のログインが最初に発生する必要があるこのタイプの状況を処理する標準的な方法は、ユーザーの背後でサーバー側でログインを発生させ、トークンを返すことです。クライアントは、確実に許可されている特定のリクエストを承認するために使用できます。

于 2012-09-12T16:11:09.280 に答える