0

シナリオ:

clientWebsite は、ユーザーがセキュリティ カードを PC に挿入している場合にのみアクセスできます。ClientWebsite は、セキュリティ カードを使用して行うすべてのことと同様に、私の管理外です。

ユーザー名/パスワードを必要とする js Web アプリを開発しました。システムはセキュリティ トークンを要求し、提供された資格情報が有効な場合、トークンが返され、url パラメーターとしてすべての要求に追加されます。トークンは 60 分間有効です。

ClientWebsite のシステム管理者は、保護されたサイトに私の js アプリへのリンクを配置したいと考えています。誰かが ClientWebsite を表示できる場合、彼らは私の js アプリを表示することが許可されており、リンクをたどった後、再度ログインする必要はありません。

サーバー上のページを指すテスト リンクをシステム管理者に挿入してもらい、js/jquery を実行して http リファラーを取得しましたが、常に空白でした。結論 -- クライアントのブラウザでリファラーが無効になっているか、リファラーの送信を無効にするように ClientWebsite が構成されている可能性があります。驚くことではありませんが、これは控えめに言っても非常に安全なサイトです。

ClientWebsite を離れる前に、ajax/php を介してセキュリティ トークンを簡単に要求できます (ClientWebsite に配置するコードをシステム管理者に提供します)。このメソッドは、php スクリプトでハードコードされた資格情報を使用し、リンクにトークンを返す/追加して、js アプリに到達したときに使用できるようにします。次に、js アプリはトークンの有効性をチェックし、OK の場合、js アプリでのログインが抑制されます。

問題:

誰かが ClientWebsite からの ajax 呼び出しを c/p し、それを ClientWebsite の外で実行し、トークンを取得し、それを使用して私の js アプリにアクセスできる他の誰かにトークンを渡すことができます。

質問:

PHPスクリプトでリファラーをチェックし、リファラーがClientWebsiteと一致する場合にトークンを発行したいのですが、リファラーが送信されておらず、リファラーがスプーフィングされる可能性があります。トークンのリクエストが実際に ClientWebsite ページから来ていることを確認するために、他にどのような方法を使用できますか?

ありがとう!!

編集:

システム管理者に ajax 呼び出しを次のように提供します。

$('#jsAppLink').click(function(e){
    e.preventDefault();
    var currentHref = $(this).attr('href');
    $.ajax({
        "type":"post",
        "dataType": "jsonp",
        "url": "https://mydomain.com/getTokenUsingCurl.php",
        "success": function (returnData){
            newHref = currentHref + "?token=" + returnData.token;
            window.location = newHref;
        }
    })
})

onClick、サーバー上の php スクリプトが照会されます。このスクリプトには、ハードコードされた資格情報が含まれています。公共の場から。トークンを ClientWebsite に返し、それを js アプリの URL に追加してから、リンクをクリックしてユーザーを js アプリにルーティングします。

4

2 に答える 2

0

ClientWebsite からセキュリティ トークンを渡すことは、おそらく正しい考えです (リファラーは絶対に避けてください)。あなたが見逃している重要な部分は、トークンが常に変化していることを保証することだと思います。トークンは、事前設定された資格情報だけでなく、可変要素 (他に何もない場合はタイムスタンプ) で構成され、有効期間が短い必要があります。

ClientWebsite が最初にユーザーをアプリに送信するときに、トークンを検証し、トークンが最新であることを確認します (理想的には数秒以内)。誰かが ajax 呼び出しからトークンをコピーして他の誰かに渡した場合、それが有効なトークンと見なされなくなったことを確認する必要があります。

于 2013-04-05T17:17:05.003 に答える