关于csrf防御
什么是csrf
csrf就是攻击者利用受信任用户的浏览器(利用浏览器的cookie),在其已经登录某个站点(A站点)的情况下,在用户不知情的情况下在A站点执行了恶意操作。恶意url一旦点击,发送请求时浏览器会自动携带cookie
从上面简介可知,发生csrf主要在于A站点,没有对发起的请求进行充分的身份验证
一些防御手段
刚开始学的时候看到的防护手段:
-
验证referer(csrf一般请求是来自第三方站点,只需验证操作请求是否来自A站点)
-
加tocken
-
加一些确认操作(比如想要修改密码需要输入原密码,进行一些敏感操作需要用户确认)
-
cookie的samesite属性(本质上也是利用csrf一般是第三方站点)
关于tocken
已经很清楚了,防CSRF主要就是做好请求方的身份验证。而cookie进行身份验证显然不行,因为这里浏览器自动携带cookie(这里不考虑前端限制,如cookie的samesite属性)
之前不太了解tocken,上网查大概就是:一段加密的值,在客户端发送请求时会携带,发到服务端并进行验证
疑问:那么tocken是怎么携带的呢,似乎这和cookie没什么区别
查资料tocken防御csrf原理:
-
tocken并不像cookie一样,在浏览器发请求时在http头自动携带
-
tocken作为参数发送到服务端,服务端对比收到tocken与存储的tocken值(get请求的url,post请求的表单隐藏值)
从1、2可以理解为tocken不是由浏览器携带,而像是用户主动添加参数值发送。既然这里体现主动,用户就不会在不知情下执行操作(攻击者是不知道tocken值的,所以攻击者在构造表单或者url时不能构造出tocken对应的参数值,那么可以理解为一旦操作执行成功,意味着tocken参数值正确,而tocken参数值只有用户自己知道——用户登录成功其执行操作的表单会自己有这个隐藏属性)
-
还有一种tocken验证是cookie中包含了tocken,然后要求tocken作为参数传到服务端(这种情况下服务端不必存储tocken,而是拦截请求对比cookie提取的tocken和参数传过来的tocken是否一致)
总的来说tocken防csrf要点还是它要作为参数传到服务端,csrf构造恶意url和表单都需要攻击者构造参数(这些参数代表某些操作,而tocken参数代表身份验证),而tocken攻击者是不知道的
其实cookie攻击者也不知道,只要解决了浏览器不管请求是否合法都自动携带cookie的问题也是可以防止csrf的
标签:浏览器,请求,cookie,防御,tocken,攻击者,思考,csrf From: https://www.cnblogs.com/q1stop/p/18086253