跨站请求伪造CSRF原理
CSRF是Cross Site Request Forgery的缩写,CSRF是伪造成合法用户发起请求
先了解下session:
- 用户登录时服务器端生成一个Session
- 返回给用户session_id在cookie中
- 用户下次登录带着有session_id的cookie登录
跨站请求伪造例子
只有session的话,如果有一个网站可以访问所有的cookie,那么就会获取到所有的session,然后带着你的session去访问别的网站。
比如:在一些诱骗性的网站上,可以创建一个按钮(比如:高清无码),指向别的网站网址(比如银行),然后带着你的session进行转账,银行发现是本用户进行的转账,但是用户并不知道点的是转账按钮!
防止跨域请求原理
用户先访问自己的网站,然后给用户网页放一个csrf数值,下次用户带着上次的csrf值访问才可以(每次都不一样,不同于session)。
所以一般POST修改数据才需要csrf,get获取不需要csrf。
同源策略
一般浏览器只能访问自己本地的数据,不能获取别的网站主机信息(浏览器的同源策略)
Web浏览器允许第一个网页中包含的脚本访问第二个网页中的数据,但前提是两个网页具有相同的来源。来源定义为域名/IP,主机名和端口号的组合。此策略可防止一个页面上的恶意脚本通过该页面的文档对象模型来访问另一网页上的敏感数据。
安全性和方便性是成反比的。同源策略提升了Web前端的安全性,但牺牲了Web拓展上的灵活性。设想若把html、js、css、flash,image等文件全部布置在一台服务器上,小网站这样凑活还行,大中网站如果这样做服务器根本受不了的,可用性都不能保证的话,安全性还算个吊?现代浏览器在安全性和可用性之间选择了一个平衡点。在遵循同源策略的基础上,选择性地为同源策略“开放了后门”
img script style
等标签,都允许垮域引用资源。