gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:42:17 25 4
gpt4 key购买 nike

我有一个站点的测试版本位于正常站点的子域中,例如: http://test.x.com而不是 http://x.com .

我使用 <base>将所有资源请求转换回原始域的标记:

<base href="http://x.com/" />

在我实现 HTML5 push/replaceState 支持之前,这种策略非常有效。

现在,如果我在控制台中执行这条语句:

history.pushState({}, "", "");

... 然后我得到一个 DOMException基于 WebKit 的浏览器中的对象:

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

如果我删除 <base>标记并执行相同的语句,新状态被推送,没有异常。

几个问题:1) 这种行为是一种安全风险,还是一个错误?和 2) 是否有防止异常的解决方法,或者除了使用 <base> 之外的策略将完全回避问题的标签?

感谢您的考虑。

最佳答案

这不是错误,您违反了 Same origin policy . ""是一个相对 URL,它将被解析为 'http://x.com/'因为你使用了 <base>标签。 http://x.com是与托管页面的域不同的域,这就是为什么这样做会违反同源策略。

使用指向 http://test.x.com/ 上资源的绝对 URL在你的history.pushState()电话应该解决这个问题:

history.pushState({}, "", "http://test.x.com/");

关于HTML5 push/replaceState 和 <base> 标签导致安全异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com