关于session、cookie、token、同源策略、跨域、xss、csrf的简要说明
一、session、cookies、token
一张图说明白
二、同源策略、 跨域
1、同源策略
协议、域名、端口任一不同都是非同源的。
浏览器的同源策略是一种安全功能。同源策略限制了从同一个源加载的文档或脚本与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。 所以a.com下的js脚本采用ajax读取b.com里面的文件数据是会报错的。
当前页面的url
|
被请求页面url
|
是否跨域
|
原因
|
http://mashibing.com/vip.html
|
http://mashibing.com/1/vip.html
|
否
|
协议、域名、端口都相同
|
http://mashibing.com/vip.html
|
https://mashibing.com/vip.html
|
是
|
协议不同
|
http://mashibing.com/vip.html
|
http://vip.mashibing.com/vip.html
|
是
|
域名不同
|
http://mashibing.com/vip.html
|
http://mashibing.com:8080/vip.html
|
是
|
端口不同
|
2、跨域
<script>、<img> 、 <iframe>、 <link> 、<video> 这些标签都可以发起跨域请求 方式是发get请求。
不同源就会造成跨域问题。
三、如何解决跨域问题
1、jsonp(手动挡,前端、后端都需要写代码)
优点:不受浏览器的限制,任何浏览器都支持;
缺点:只支持get请求
为什么不使用image等src?
image会将后端发送来的数据转换为图片的形式,script的src会转换为js代码
2、Cros
在浏览器中指定Origin来源,如果在服务器接受范围,请求成功。
CORS与JSONP的使用目的相同,但是比JSONP更强大。
JSONP只支持GET请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。
四、相关框架
1、shiro
2、spring security
五、几个相关的概念
1、SSO (Single Sign On)单点登录
用户登录一个系统,这个系统的子系统也可以直接登陆,不需要在输用户名密码。而实现这个功能就需要用到session共享。
2、Session共享
3、Oauth、CAS
接下来会说到。
4、OpenID
一个网站可以用qq、微信、新浪微博账后登录,而可以不需要自己注册。eg:简书 需要新浪、qq、微信实现openID技术,对简书提供一个接口,只是把必须要用的信息给简书(eg:用户名,头像等)
5、XSS
跨站脚本攻击。流量攻击。
6、CSRF
伪装请求攻击。参考链接:https://www.cnblogs.com/nkefww/p/13121194.html
解决办法:
1、get请求不做更新数据的操作。
2、可以加验证码机制。
3、登陆后除了下发cookie(保持会话),还下发hash码(每次请求都会下发不同的hash码,并存到页面上,不要放到cookie里)每次请求都带着hash码,这样也可以有效的防止CSRF攻击。
CSRF这种方式的跨域连接是得不到页面里的内容的,除非自己把信息填进去,那骗子就太开心了,乐炸了。
萝莉身,御姐心。。。。。