同源策略,是一个在Web应用安全中的一个重要的模型,它定义了两个站点之间是否可以执行彼此的脚本,比如A站不能通过脚本访问B站的cookie,不然会用户的信息毫无安全性可言了。 我们学会了如何解析URL,就好理解同源策略了,它的定义是:如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin)。那么两个在URL中:scheme://[login[:password]@](host_name|host_address)[:port][/hierarchical/path/to/resource[?search_string][#fragment_id]]scheme,host_name,port就决定了是否同源。具体实例可以参考MDN 那么为什么要有同源策略,没有的话怎么样,这篇文章里说,如果没有同源策略的话,你的个人信息容易被获取到,但是没说如何获取,在不同的浏览器Tab中,总无法读取另一个页面的DOM吧,简单的方法是使用iframe,我们看一个简单的例子,使用本地文本one.html作为一个含有敏感信息的网站:one.html:<input type="text" value="myuser" id="user" /> <br> <input type="password" value="123456" id="pwd" />通过iframe.html读取它的信息,并把iframe隐藏掉:<!DOCTYPE html> <html lang="en"> <head> <title>fream</title> <style> iframe { display: none; width: 1000px; height: 500px; } </style> <meta charset="UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <script> window.onload = function () { var iframe_one = document.getElementById('one-iframe'); var iframe_one_document = iframe_one.contentWindow.document; alert(iframe_one_document.getElementById('user').value + ' with password: ' + iframe_one_document.getElementById('pwd').value); } </script> <iframe id="one-iframe" src="./one.html" /> </body> </html>这样就很容易得到有用的信息了,如果不同的域之间可以随意获取DOM对象数据的话,那么随便造很多网站就能得到其他网站的信息了,那样就无所谓安全了。 出于这样的考虑,有了同源策略,在同一个域下的脚本才能进行DOM操作,想要进行跨域操作的话,常见的是使用CORS或者JSONP,那将是另一个主题了。 如何绕过同源策略,更是一个有意思的安全问题,以后再深入学习吧。 参考: 1.同源策略——浏览器的安全卫士 2.JavaScript 的同源策略
2015年5月25日星期一
为什么要有同源策略
订阅:
博文评论 (Atom)

没有评论:
发表评论