ここがこの質問をする正しい場所であることを願っています。私は現在、特別な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がどのように機能するかを説明していただけますか?
以前にユーザーがAmazon.comとFacebook.comにアクセスしたことがわかります。
いいえ、閲覧履歴に任意にアクセスすることはできません。
history.length
_)。history.go(-2)
)。閲覧履歴を操作するには、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のこの拡張機能は やや物議を醸す になっています。
あなたの同僚は間違っています。 JS履歴APIは、以前の履歴アイテムへのクロスプラットフォームアクセスを許可されていません。 APIを調べると、読み取り呼び出しはなく、削除、置換、履歴への追加が行われているだけです。 history.back()
がありますが、実際には現在のページを離れるであり、また、HTTPを介して取得しなかった情報はありませんreferrer
。
したがって、いいえ、何かを変更するために、それを読む必要はありません。ブラウザー内部は履歴を保持する必要がありますが、そのコンテンツを変更中のJSアプリケーションに公開する必要はありません。