在下面的代码中,当您按下submit时,iframe
会加载textbox
中提到的url。这不是违反not allowing cross domain request
吗?我使用的是mozilla 14.0。
<!DOCTYPE html>
<head>
<script>
function myFunction()
{
document.getElementById("site").src=document.getElementById("web").value;
}
</script>
</head>
<body>
<input id="web" type="text" name="user">
<input type="submit" value="Submit" onclick="myFunction()"> <br/>
<iframe id="site" src="" width="1200" height="1200"></iframe>
</body>
</html>
不,这不是违规行为,它完全有效。
同源策略阻止跨不同域上的页面访问方法和属性。它还可以防止修改包含的网页。但这并不妨碍你将其作为一个整体来包含(甚至以有限的方式与之互动)。
基本上,此政策防止网站A在网站B上冒充用户。
示例
想象一下,你访问了你的银行账户(bank.com)。当你登录时,银行网站会为你生成一个"用户环境",让你可以访问受限制的内容。此外,它还允许您通过http请求(表单提交或Ajax请求)修改银行帐户。
该网站信任你,因为你已经证明了你是你所说的自己,你信任该网站,因为你知道,在安全的环境中,除了你之外,没有人可以与你的银行网站互动。
现在想象一下,你访问了另一个选项卡(evilweb.com)上的恶意网站,该选项卡与你的银行网站有一个iframe。如果没有这项政策,evilweb.com可能会伪装成你,进入禁区,读取DOM信息(银行账号等),甚至与之互动,点击转账按钮并清理你的银行账户。这个iframe甚至可以隐藏起来。
然而,没有什么能阻止evilweb.com"下载"bank.com的公共内容,就像没有任何东西能阻止我访问公共网站一样,即使我没有访问凭据。
所以。。。冒充用户与发出请求不同
因此,基本上,evilweb.com可以直接向bank.com提出请求,但它不能依靠你并代表你提出请求。
否。没有数据在一个域和另一个域之间传输。
从安全角度来看,如果您导航到的URL来自用户输入或任何其他来源,则完全无关。
如果您试图将iframe内部的数据拉到外部世界,或者操纵iframe的内容,这将违反同源策略,并且会失败。
不,可以加载页面。但是,您将无法访问iframed跨来源文档的内容。
JavaScript没有对外部页面执行任何操作,因此不存在跨域问题。代码所做的就是通知iframe加载url。