浅谈web安全问题——安全永不过时(二)

前言

第一次写系列文章,希望自己一定坚持下去。

书接前文xss,我们今天来讲一下csrf。

csrf (Cross Site Request Forgery)跨站点请求伪造。

概念

攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

举例(只是个例子哈,一般购物网站的防护措施还是很强的。):

张三在某个正规购物网站上购物,这时电脑上突然弹出,一个链接,很诱人的那种(),张三点了进去,没想到却是挂羊头卖狗肉,里面什么也没有,只有一些广告和关闭按钮,这影响了张三兴致,他骂骂咧咧的关掉了网页忙其他事情去了。过了几天,他收到消息,发现自己账户里面没钱了,这时他才意识到自己中招了。

引用一个图片便于理解

解析一下示例CSRF攻击的流程:

  • 受害者登录购物网站并保留了登录凭证(Cookie)。
  • 攻击者引诱受害者访问了钓鱼网站。 向 购物网站 发送了一个请求。
  • 购物接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
  • 购物网站以受害者的名义执行了某些行为。
  • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让购物网站执行了自己定义的操作。

分类

csrf大致可以分为三类。构造get请求,构造post请求,引入外部链接。

构造get请求

这种类型的攻击一般直接放在 img标签的src中,当用户访问的时候,get请求就会被发送出去。目标网站就会收到一个跨域请求。

构造post请求

这种类型的攻击一般是利用 表单类组件中的 type = 'hidden'属性,让用户看不见,然后在脚步中自动提交。 目标网站就收到了一次跨域的post请求。

 <form action="http://bank.example/withdraw" method=POST>
    <input type="hidden" name="account" value="xiaoming" />
    <input type="hidden" name="amount" value="10000" />
    <input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script> 

链接型的攻击

这种情况下的攻击并不常见,因为相比于上面他不是自动触发,而是需要去点击一下外表链接标签这种

防范

验证码

最简单的就是利用验证码进行身份验证,比较稳妥。

同源策略

直接防止跨域请求,来防止csrf 在请求头中的referer携带Origin字段,用该字段去判断是否同源。 但是这种方法不是很稳健,因为referer是浏览器提供的,不同浏览器之间是存在差异的。并且一些情况下还可以认为修改。所以并不安全。

BUT

只从同源上来解决问题是不够的,现在来设想一种场景,用户有权限在评论区发布一下图片资源时候,就很容易发动同源攻击了。

利用token,

服务器生成token ,放在session中,网页生成之后发送给,用户,之后每次请求浏览器要带上token,一般放在请求头中。此时服务器进行验证,判断是否是同一用户所发送的。

利用cookie

单纯的csrf攻击,黑客是拿不到cookie,所以前端获取cookie之后拿去服务器验证,也是一种方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值