前端安全之CSRF + token加密

跨站请求伪造,Cross Site Request Forgery(CSRF):是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。

CSRF攻击

例子:用户是在icbc.com.cn进行正常的转账操作 我们想把资金转到Beauty.com

在这里插入图片描述

1.利用一个用户的会话cookie在浏览器没有关闭的时候,是不会被删除的。
在我们的Beauty.com中构造一个领奖页面,里边包含一个连接,让用户去点击

恭喜你获得了iPhone X一台,快来 <a href="www.icbc.com.cn/transfer?toBankId=账户名&money=金额">领取吧!</a>

我们得事先知道icbc.com.cn的转账操作的url和参数名称。如果这个用户恰好登录了icbc.com, 那他的cookie还在, 当他禁不住诱惑,点了这个链接后,一个转账操作就神不知鬼不觉的发生了

2.利用img标签用户不进行链接点击也能完成转账操作

<img src="www.icbc.com.cn/transfer?toAccountID=黑客三兄弟的账户&money=金额">

只要他打开了这个页面,不用点击任何东西,就会发生转账操作。

3.icbc.com.cn的转账操作需要form表单,是POST操作的情况
创建一个不可见的form,用户一访问就用JavaScript自动提交;

<form action="http://www.icbc.com.cn/transfer" method="POST">
	<input type="text" name="toAccountId" value="账户"/>
	<input type="text" name="money" value="金额"/>
</form>

减少CSRF攻击的方法

  • 1.服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
  • 2.使用验证码
  • 用户在icbc.com.cn转账,显示转账的form,除了常用的字段之外,额外添加一个token ;这个token是icbc.com服务器端生成的,是一个随机的数字。
<form action="http://www.icbc.com.cn/transfer" method="POST">
	<input type="hidden" name="token" value="daft12348899"/>
	<input type="text" name="toAccountId" value="账户"/>
	<input type="text" name="money" value="金额"/>
</form>

用户的转账数据发送的服务器端, icbc.com就会检查从浏览器发过来的数据中有没有token,并且这个token的值是不是和服务器端保存的相等,如果相等,就继续执行转账操作,如果不相等,那这次POST请求肯定是伪造的。

介绍下如何实现 token 加密

  • 1.token加密主要是用来做客户端和服务端的用户信息校验
  • 2.服务端生成随机数,用户登录会将随机数告知客户端,并自己在缓存空间保留一份,每次客户端发送token,
  • 服务端会对比缓存空间是否有此token,来判断用户是否存在
  • 3.当确定token存在,进行下一步校验…,最后通过token拿取客户端需要的信息
  • 4.加密方法:JWT,AES,DES…或者直接随机字符串
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值