web-dev-qa-db-ja.com

HTML5アプリは閲覧履歴にアクセスできますか?

ここがこの質問をする正しい場所であることを願っています。私は現在、特別なHTML5アプリケーションを使用して、自分のサイトの訪問者の閲覧履歴を取得できるかどうか、同僚と話し合っています。

ユーザーがAmazon.com、Facebook.comにアクセスしてから、私のサイトexample.comに移動し、HTML5-Appを使用するとします。

私の同僚は、History-API( https://developer.mozilla.org/en-US/docs/Web/API/History_API または http://diveintohtml5.info /history.html )ユーザーが以前にAmazon.comとFacebook.comにアクセスしたことがわかります。どうして?なぜなら、閲覧履歴を操作するには、HTML5-Appが最初に履歴を読み取る必要があるからです。これは本当ですか?本当に信じられない。

それが真実でない場合、このHistory-APIがどのように機能するかを説明していただけますか?

2
John Doe

以前にユーザーがAmazon.comとFacebook.comにアクセスしたことがわかります。

いいえ、閲覧履歴に任意にアクセスすることはできません。

  • あなたはできます履歴のエントリ数を確認できます(_history.length_)。
  • あなたはできますこれらの履歴エントリのいずれかに戻ります(例:history.go(-2))。
  • これらのエントリが何であるかできない(ドメインでもURLでもない)。

閲覧履歴を操作するには、HTML5-Appが最初に履歴を読み取る必要があります。

さて、以前のエントリの詳細はメモリに存在しますが、ブラウザはそれらをコンテンツスクリプトから隠します。それ以外の場合は、クロスドメインの履歴にアクセスできるため、明らかにプライバシーに関する大きな問題が発生します。以前のサイトの1つがURLにパスワードリセットトークンを持っていると想像してみてください。

それが真実でない場合、このHistory-APIがどのように機能するかを説明していただけますか?

HTML5では、履歴スタックの状態を操作できます。 history.pushState()を使用します。これは、多くのAJAXインタラクションがあり、ページ全体をリロードせずにURLを変更したいWebサイト)に特に役立ちます。1 ただし、URLは同じドメインに属するパスにのみ変更でき、現在のページの状態オブジェクトにのみアクセスできます。 MozillaによるAPIの this security review に、セキュリティに関するその他の考慮事項があります。

(これまで たくさんの 閲覧履歴リークの脆弱性があり、CSSプロパティを悪用するなどして、サイドチャネルを介してアクセスされたURLを開示する可能性があることに注意してください。ただし、これらの攻撃はAPIに直接関係していません。)

1また、パスを動的に疑わしくないものに変更することにより、URLに反映されたXSSを非表示にしたい攻撃者にも役立ちます。そのため、APIのこの拡張機能は やや物議を醸す になっています。

3
Arminius

あなたの同僚は間違っています。 JS履歴APIは、以前の履歴アイテムへのクロスプラットフォームアクセスを許可されていません。 APIを調べると、読み取り呼び出しはなく、削除、置換、履歴への追加が行われているだけです。 history.back()がありますが、実際には現在のページを離れるであり、また、HTTPを介して取得しなかった情報はありませんreferrer

したがって、いいえ、何かを変更するために、それを読む必要はありません。ブラウザー内部は履歴を保持する必要がありますが、そのコンテンツを変更中のJSアプリケーションに公開する必要はありません。

0
Marcus Müller