web-dev-qa-db-ja.com

フロントエンドのサードパーティサイトにユーザーアクセストークンを保存する方法

wordpressプラグインで作業しています。これは、disqusのようなコメントスレッドシステムを提供します(ただし異なります)。

ログインして(コメントを投稿する)ためのワークフローは次のようになります。

  • ユーザーがwordpressブログのログインをクリックします
  • プラグインのバックエンドAPIのログインフォームでポップアップが開きます(別のサイト)
  • ユーザーがログインし、PostMessageを使用してアクセストークンを送り返します。

ここで、アクセストークンを使用して、コメントの賛成または投稿などのアクションを実行するときに、トークンとともに投稿リクエストをバックエンドAPIに送信し、トークンが有効な場合は、コメント/賛成票をデータベースに追加します。

しかし、ユーザートークンを安全に処理する方法がわからない:私の最初の考えは、それをCookieに入れることでしたが、悪意のあるwordpressブログは、いくつかのjsを実行して、ユーザーからすべてのトークンを自動的に盗むことができますWebサイトにログオンするユーザー。

また、すべてのロギングはwordpressブログのフロントエンドで行われているため、ユーザーがデータを保存したときにバックエンドapiがアクセスできるようにデータを保存する方法がわかりません悪意のあるブログではありません。

そのトークンを安全に保存するにはどうすればよいですか?セッション変数に依存するために、iframeにWebサイトを埋め込むことを考えましたが、それがどれほど安全かはわかりません。

1
drovfr

そのトークンは、プラグインを使用しているwordpressサイトではなく、バックエンドサーバーによって設定される必要があります。

サーバーがCookieを発行するときにhttpOnlyを設定すると、バックエンドへのリクエスト(たとえば、wordpressサイトからのJavaScriptを介した)により、そのCookieがJavaScript自体(wordpressページから)はアクセスできませんが、ブラウザによる要求。

[〜#〜] owasp [〜#〜] から:

HttpOnlyフラグ(オプション)がHTTP応答ヘッダーに含まれている場合、(ブラウザーがこのフラグをサポートしているかどうかにかかわらず)クライアント側スクリプトからCookieにアクセスできません。その結果、クロスサイトスクリプティング(XSS)の欠陥が存在し、ユーザーがこの欠陥を悪用するリンクに誤ってアクセスした場合でも、ブラウザー(主にInternet Explorer)はCookieを第三者に公開しません。

結局のところ、あなたの質問は、コミュニケーションモデルをずっと考えていなかったことを意味しています。この情報は、wordpressブログのスコープからアクセスできる必要はありません。

1
Tobi Nary