HTML5 push / replaceState和标记导致安全异常

|| 我在正常站点的子域中有一个站点的测试版本,例如: http://test.x.com,而不是http://x.com。 我使用“ 0”标记将所有资源请求转换回原始域:
<base href=\"http://x.com/\" />
在我实现HTML5 push / replaceState支持之前,此策略非常有效。 现在,如果我在控制台中执行以下语句:
history.pushState({}, \"\", \"\");
...然后在基于WebKit的浏览器中得到一个
DOMException
对象:
code: 18
constructor: DOMExceptionConstructor
line: 2
message: \"SECURITY_ERR: DOM Exception 18\"
name: \"SECURITY_ERR\"
sourceId: 4839191928
__proto__: DOMExceptionPrototype
...以及FireFox 4中的此错误:
Security error\" code: \"1000
如果删除“ 0”标记并执行相同的语句,则将推入新状态,也不例外。 几个问题:1)这种行为是安全隐患,还是漏洞? 2)是否有一种解决方法可以防止异常发生,或者是一种使用“ 0”标记的策略来完全避免问题的发生,而不是使用该策略? 感谢您的考虑。     
已邀请:
        这不是错误,您违反了“同源起点”政策。
\"\"
是相对URL,因为您使用了
<base>
标记,所以它将解析为
\'http://x.com/\'
。 http://x.com是与托管页面的域不同的域,这就是为什么这样做会违反同一原始策略的原因。 在您的
history.pushState()
呼叫中使用指向http://test.x.com/上资源的绝对URL可以解决此问题:
history.pushState({}, \"\", \"http://test.x.com/\");
    

要回复问题请先登录注册