之前有遇到类似跨域问题,对此作小结。主要内容包括,跨域的基础知识和跨域攻击。
跨域 定义:跨域HTTP请求(Cross-site HTTP request),顾名思义指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。
同域 定义:如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源(域)。
跨域原因 | 域1 | 域2 |
不同端口 | whu.edu.cn:80 | whu.edu.cn:8080 |
不同域名 | drkt.whu.edu.cn | zsb.whu.edu.cn |
不同协议 | https://whu.edu.cn | http://whu.edu.cn |
起源:同源策略|SOP(Same origin policy)由Netscape公司1995年提出,它是浏览器最核心也最基本的安全策略。
同源策略限制:
- DOM对象
- JS对象
- Cookie,LocalStorage
- XmlHttpRequest请求(Ajax请求)
用途:用于防止 跨站请求伪造攻击|CSRF
(Cross-site request forgery)
A cookie associated with a cross-site resource at http://hm.baidu.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
上述是一个跨域请求Cookie的例子,是baidu统计代码在谷歌游览器中的问题。
在开发实际遇到的问题是,用户通过伪造请求,提交小游戏成绩。
解决方案:
使用Django时,在setting中删除django.middleware.csrf.CsrfViewMiddleware