前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web前端安全学习-CSRF

Web前端安全学习-CSRF

作者头像
libo1106
发布2018-08-08 16:12:23
3860
发布2018-08-08 16:12:23
举报
文章被收录于专栏:Web 开发Web 开发Web 开发

今天下午上了一堂前端安全的课,挺有意思,记录下来。在上课之前,我对安全的概念是:

用户输入是不可信的,所有用户的输入都必须转义之后才入库。

然后,上面这个这种方式,仅仅是防止SQL注入攻击,避免业务数据库被渗入。

在数据库有了一层安全保护之后,攻击者们的目标,从服务器转移到了用户身上。由此,出现了CSRF攻击和XSS攻击。

CSRF

CSRF (Cross-Site-Request-Forgery) 全称是跨站请求伪造。是攻击者伪造用户身份,向服务器发起请求已达到某种目的的攻击。

GET类型的CSRF

假如有一个业务系统API,其有一个点赞的api是http://domain.com/api/like?pid=111 ,如果想要刷pid为111的点赞,只需要构建一个简单的HTTP请求即可。

<img src='http://domain.com/api/like?pid=111'>

因为Img标签会自动请求src的网络,估当用户浏览一个含有上述img标签的网址的时候,不经意间已经发出一个为pid=111内容进行点赞的操作。

其实这种写操作,最好改成POST的形式,起码增加了攻击者的门槛。

POST类型的CSRF

此类型的特点是,业务系统的api,对于写操作,是用POST的方式,而不是GET的方式。

和GET对比起来,攻击门槛高了一些,不能仅仅依靠img标签来构造HTTP请求,得靠表单来实现HTTP POST了。

<form action="http://domain.com/api/like">
  <input type="text" name="xxx" value="1">
</form>
<script>
  document.forms[0].submit();
</script>

先准备一个攻击页面,如上面的代码,然后将URL隐藏在预先准备的内容中,分发出去,诱使用户点击攻击页面。

CSRF防御方式

GET类型的CSRF,就应该从代码层面规避,让写操作必须走HTTP POST的方式,这样也更符合HTTP Method的语义。

POST类型的CSRF,由于是跨站攻击,一个简单的防御方式是对HTTP Refer进行判断,如果是非业务域名发起的HTTP请求,则直接过滤处理。

但HTTP Refer并不是百分百可靠,在某些时候,服务器是收不到HTTP Refer值的(例如某些代理环境,例如低版本浏览器)。

所以,HTTP Refer可以用来做CSRF攻击的检测,但防御还需要另外真正的宙斯盾。

根据上面可以知道,所有CSRF攻击,最重要的是伪造攻击URL,如果我们的API,带有一个随机参数,让攻击者没法固定伪造,则可以完美防御CSRF攻击。

防御CSRF,可以在我们请求的参数里面,携带一次性随机Token信息即可。

<form action="http://domain.com/api/like">
  <input type="text" name="xxx" value="1">
  <input type="text" name="token" value="<?php echo token();?>" style="display:none;">
</form>

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-06-262,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CSRF
    • GET类型的CSRF
      • POST类型的CSRF
        • CSRF防御方式
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档