java审计-CSRF跨站请求伪造

CSRF攻击利用用户的已登录状态执行非预期操作,如发送恶意请求。攻击者无法获取到服务器生成的csrf_token,通过在表单中加入这个令牌并验证,能有效防止这类攻击。session存储的csrf_token增加了安全性,防止cookie被利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础

  • CSRF的全名为Cross-site request forgery,它的中文名为 跨站请求伪造。CSRF是一种夹持用户在已经登陆的web应用程序上执行非本意的操作的攻击方式。

  • CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

    在这里插入图片描述

例子

  • 不提交csrf_token验证上面防护。这csrf_token字段就是用来表单提交,POST请求验证的csrf_token,后端生成的,提交后会和后端校验。

    <div>
    	<!--Spring 3.2+Thymeleaf 2.1+可以通过这条语句自动生成一个csrf_token来验证-->
    	<form name="f" action="/csrf/post"method="post">
    		<input type="text" name="input" />
    		<input type="submit" value="Submit" />
    		<input type="hidden"th:name="${_csrf.parameterName}"th:value="${_csrf.token}" /><!--使用spring中内置token-->
    	</form>
    </div>
    

解决

  • 在表单里隐藏一个随机变化的 csrf_token提交到后台进行验证,如果验证通过则可以继续执行操作。这种情况有效的主要原因是网站 B 拿不到网站 A 表单里的 csrf_token。
    • 这种方式的使用条件是PHP和JSP等。因为cookie已经不安全了,因此把csrf_token值存储在session中,然后每次表单提交时都从session取出来放到form表单的隐藏域中,这样B网站不可以得到这个存储到session中的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值