go语言csrf库使用实现原理示例解析 |
||||||||||||||||||||||||||||||||||||||||||
+ 目录
引言今天给大家推荐的是web应用安全防护方面的一个包:csrf。该包为Go web应用中常见的跨站请求伪造(CSRF)攻击提供预防功能。
csrf小档案
一、CSRF及其实现原理CSRF是CROSS Site Request Forgy的缩写,即跨站请求伪造。我们看下他的攻击原理。如下图:
当用户访问一个网站的时候,第一次登录完成后,网站会将验证的相关信息保存在浏览器的cookie中。在对该网站的后续访问中,浏览器会自动携带该站点下的cookie信息,以便服务器校验认证信息。 因此,当服务器经过用户认证之后,服务器对后续的请求就只认cookie中的认证信息,不再区分请求的来源了。那么,攻击者就可以模拟一个正常的请求来做一些影响正常用户利益的事情(比如对于银行来说可以把用户的钱转账到攻击者账户中。或获取用户的敏感、重要的信息等) 相关知识:因为登录信息是基于session-cookie的。浏览器在访问网站时会自动发送该网站的cookie信息www.lu0.com,网站只要能识别cookie中的信息,就会认为是认证已通过,而不会区分该请求的来源的。所以给攻击者创造了攻击的机会。
CSRF攻击示例假设有一个银行网站A,下面的是一个转给账户5000元的请求,使用Get方法
?
然后,攻击者修改了该请求中的参数,将收款账户更改成了自己的,如下:
?
然后,攻击者将该请求地址放入到一个标签中:
?
最后,攻击者会以各种方式(放到自己的网站中、email、社交通讯工具等)引诱用户点击该链接。只要是用户点击了该链接,并且在之前已经登录了该网站,那么浏览器就会将带认证信息的cookie自动发送给该网站,网站认为这是一个正常的请求,由此,将给黑客转账5000元。造成合法用户的损失。 当然,如果是post表单形式,那么攻击者会将伪造的链接放到form表达中,并用js的方法让表单自动发送:
?
二、如何预防常见的有3种方法:
其中使用Token信息这种是三种方法中最安全的一种。接下来我们就看看今天要推荐的CSRF包是如何利用token进行预防的。
三、CSRF包的使用及实现原理
csrf包的安装
?
基本使用该包主要包括三个功能:
该包的使用很简单。首先通过csrf.Protect函数生成一个中间件或请求处理器,然后在启动web server时对真实的请求处理器进行包装。 我们来看下该包和主流web框架结合使用的实例。
使用net/http包启动的服务
?
echo框架下使用csrf包
?
gin框架下使用csrf包
?
beego框架下使用csrf包
?
|