12

GitHubのブログに見られるように、ツリーブラウジング用のHTML5のJavaScriptpushState機能(最新のブラウザー用)を実装し、ハッシュバングなしでAJAXナビゲーションを実現しました。

コードは単純です:

$('#slider a').click(function() {
  history.pushState({ path: this.path }, '', this.href)
  $.get(this.href, function(data) {
    $('#slider').slideTo(data)
  })
  return false
})

これにより、非常にエレガントに次のことが可能になります。

  1. ページ全体ではなく、AJAXを介して新しいコンテンツだけをリクエストする
  2. トランジションをアニメーション化する
  3. そして、ブラウザのURLを変更します( Twitterのようにだけでなくtwitter.com/stackexchange→twitter.com/#!/stackexchange#

私の質問は、JavaScriptが、pushStateあるWebサイトが別のWebサイトを模倣して、説得力のあるフィッシング攻撃を引き起こすのをどのように防ぐのかということです。

少なくとも、ドメインは変更できないようですが、サイト内の複数のパスについてはどうでしょうか。複数の無関係で信頼できないコンテンツプロバイダーによる可能性があります。あるパス(IE / joe)は本質的に別のパス(pushState / jane)を模倣し、悪意のある目的で模倣コンテンツを提供できますか?

4

2 に答える 2

9

私の理解では、これは、Cookieの設定、Cookieの設定、およびその他のさまざまなブラウザ機能を管理する同一生成元ポリシーと完全に一致しています。XMLHttpRequest同じドメイン+プロトコル+ポート上にある場合、それは信頼できるリソースであると想定されます。通常、Web開発者として、AJAXスクリプトが機能し、Cookieがサイト全体で読み取れるようにするためには、これが必要です。ユーザーがコンテンツを投稿できるサイトを運営している場合、ユーザーがお互いの訪問者をフィッシングしたりキーロガーしたりできないようにするのは、ブラウザではなくあなたの仕事です。

FireFoxの人々が何を考えているかについて、pushStateもう少し詳しく説明します。これは彼らにとって問題ではないようです。ここにセキュリティホールの可能性pushStateについての別の議論がありますが、他の誰かのURLの末尾にある悪意のあるクエリ文字列を隠すことができるという別の懸念があります。

于 2011-06-01T21:18:56.823 に答える
2

nrabinowitzが述べているように、そしてより一般的な言葉で言えば、それはajax呼び出しやCookieと同じように、同じドメインに制限されています。したがって、エンドユーザーには少し卑劣ですが、完全に安全です。

私たち(開発者)はこれをハッシュタグで永遠にやっていますが、それは次の理由でより良いです:

  1. きれいに見えます。
  2. ディープリンクを再確認すると、実際に実際のhtmlデータを表示して、SEOやFacebook Open Graphなどをサポートできます(どちらもスパイダーを送信してページのhtmlをスケープします)。
  3. サーバーはハッシュタグデータにアクセスできないため、サーバーログに表示されないため、分析に役立ちます。
  4. ハッシュタグの問題を修正するのに役立ちます。たとえば、アプリにアクセスするユーザーを同じhttpsURLにリダイレクトするようにNginxを書き直しました。それはすべてのブラウザで動作しますが、Safariはハッシュなしでドメインだけにリダイレクトします(とても迷惑です!)
于 2012-05-18T06:22:59.483 に答える