CSRF原理及防御
CSRF漏洞危害
- 攻击者盗用了用户的身份后,以用户的名义发送恶意请求。
- CSRF的恶意操作∶以用户名义发送邮件,发消息,盗取账号,购买商品,虚拟货币转账等等·造成的问题包括:个人隐私泄露以及财产安全问题。
CSRF漏洞防御
csrf跨站访问其他站点,是一个固定带cookie的数据包,那再添加其他验证字段,使每次访问的数据包不固定,那就能防御了
- 验证Referer字段——如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求
- 添加Token验证——可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
- 二次验证——在转账等关键操作之前提供当前用户的密码或者验证码
CSRF和XSS的区别
XSS是把恶意代码插入到html页面中,当用户浏览页面时,插入的html代码会被执行
而CSRF时一种欺骗受害者提交恶意请求的攻击。代表受害者实行恶意操作
XSS针对客户端,CSRF针对服务端
XSS利用合法客户获取信息,CSRF伪造成合法客户发起请求
利用方式
让受害者点击伪造链接,伪造链接里的代码有跳转向指定网页,并携带上恶意参数
这里讲点不一样的
在这里,XSS能否实现和CSRF一样的跳转修改功能?
答案是不能,因为一个同源策略
同源策略:
源即为url中的协议、域名、端口的组合
不同浏览器同源策略不一样
概述︰
同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。·同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。
受约束对象∶DOM、Cookie、第三方插件以及XMLHttpRequest都受到同源策略的约束
不受约束对象︰
- 页面中的链接,重定向以及表单提交是不会受到同源策略限制的。
*跨域资源的引入是可以的。但是js不能读写加载的内容。如嵌入到页面中的<script>,<img>,<link>,<iframe>等带src属性的标签。
非同源受到的限制∶
Cookie、LocalStorage和IndexDB无法读取。
DOM无法获得。
AJAX请求不能发送。
所以CSRF的表单不会被约束,而XSS用JS写的XMLHttpRequest会被约束,当然XSS可以不写这个叼请求
这里介绍一个跨域的方法
JSONP跨域
<script>的src不受同源策略约束实现跨域获取数据
只能用于GET,不能POST
- 比如
a.com/jsonp.html想得到b.com/main.js 中的数据,在a.com 的jsonp.html里创建一个回调函数xxx,动态添加<script>元素,向服务器发送请求,请求地址后面加上查询字符串,通过callback参数指定回调函数的名字。
请求地址为http://b.com/main,js?callback=xx在main.js中调用这个回调函数xx,并且以JSON数据形式作为参数传递
var script = document.createElement("script");
script.src = "https: //api.douban.com/v2/book/search?q=javascript&count=1&callback=handleResponse";document.body.insertBefore(script,document.body.firstChild);
点赞!点赞!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通