前端安全问题——CSRF跨站点请求伪造

CSRF跨站点请求伪造(Cross—Site Request Forgery)

我们可以这样理解:

用户登录,网站A核查身份是否正确,正确就下发cookie,cookie会保存在用户的浏览器中,这就完车了一次身份认证的过程,接下来呢,用户又访问了一个网站B,网站B在给用户返回页面的时候,会携带一个引诱性的点击,这个点击往往是一个链接,这个链接一般就是网站A的API接口。当用户点击了这个链接后,这个点击就访问了A网站,当我们访问A网站的时候咱们都知道浏览器会自动上传cookie,这个时候网站A觉得这个cookie拿到了,对身份进行了重新确认,身份没有问题就相当于执行了这个接口的动作。

新浪微博就出现过这样的CSRF攻击,莫名的增加了很多粉丝,就是这个原因。

这里有个前提就是注册用户在被攻击网站一定登录过,未登录的话访问权限接口提要求它登录的。

CRSF造成攻击的两个前提:

第一:网站中某个接口存在漏洞;
第二:用户在这个网站一定登陆过,这是实现CSRF攻击的两个基本前提。

攻击

你登录了一个购物网站,正在浏览商品,然后下单支付比如支付API是http://xxx.com/pay?id=100但是没有任何验证。此时你收到一封邮件,邮件中隐藏着,咱们都知道img一加载就会立即执行,所以当你查看邮件的就已经悄悄的支付了

防御

1.token验证:
我们的验证方式是自动cookie,没有手动的token,token是注册成功以后,是服务器给我们返回的。在我们访问一些权限接口的时候必须携带token,否则不能通过认证。就比如我们刚刚讲的图,点击引诱连接只会自动携带cookie不会携带token,所以就能避免攻击。
2.referer验证:
指的就是页面来源,服务器判断这个页面是不是我下面的页面,如果是我就执行你的动作,如果不是就不执行一律拦截。
3.隐藏令牌:
和token比较像,我们可能会把令牌放在请求头中,不会放在链接上,这两个本质上没什么太大的区别。只是使用方式有一点差别

CSRF VS XSS

1.XSS是像你的页面注入JS脚本执行,在JS里面去做他想做的事情;无需做权限认证;
2.CSRF是用你API本身的漏洞,帮你自动执行;需要登录认证;

你可能感兴趣的:(前端安全问题——CSRF跨站点请求伪造)