如GitHub's blog所示,他们为树木浏览(针对现代浏览器)实施了HTML5's JavaScript pushState
功能,带来了AJAX导航without Hash Bangs。
代码很简单:
$('#slider a').click(function() {
history.pushState({ path: this.path }, '', this.href)
$.get(this.href, function(data) {
$('#slider').slideTo(data)
})
return false
})
这非常优雅地允许他们:
#
,正如Twitter所做的那样 - twitter.com/stackexchange→twitter.com/#!/stackexchange) 我的问题是,JavaScript如何防止一个网站使用pushState
来模仿另一个网站,从而产生令人信服的phishing attack?
至少看起来域名无法更改,但网站内的多条路径又可能由多个不相关且不可信的内容提供商进行更改?一条路径(I.E. / joe )是否可以模仿另一条路径(pushState / jane )并提供模仿内容,可能是恶意目的?
答案 0 :(得分:9)
我的理解是,这与管理XMLHttpRequest
的{{3}},设置Cookie以及各种其他浏览器功能完全一致。假设如果它位于相同的域+协议+端口上,则它是可信资源。通常,作为Web开发人员,这是您想要(和需要)的,以便您的AJAX脚本能够工作,并且您的cookie可以在整个站点中读取。如果您正在运行一个用户可以发布内容的网站,那么确保他们不能对彼此的访问者进行网络钓鱼或键盘攻击是您的工作。
这里还有一些Same Origin Policy - 这对他们来说似乎不是问题。还有一个关于detail on what the FireFox folks are thinking about pushState
的讨论,但它是一个不同的问题,关于能够在别人的URL的末尾隐藏恶意查询字符串。
答案 1 :(得分:2)
正如nrabinowitz所言,并且用更多门外汉的术语来说:它仅限于同一个域,就像ajax调用和cookie一样。所以这是完全安全的 - 虽然对最终用户来说有点偷偷摸摸。
我们(开发人员)一直在使用哈希标签永远这样做,但它更好,因为: