CSRF漏洞学习过程记录

CSRF漏洞:跨站请求伪造

简单的来说 就是攻击者通过广告 弹窗 第三方网站 来诱导用户点击 从而利用用户没有过期的session cookie 来向服务器发送一些任意构造的请求从而达到一些攻击者想达到的目的

而且全过程中 受害者用户是无法意识到 发送了什么的 都是在不自觉的情况下的

这里解释一下 session cookie 这是一个临时cookie 会有一个生存周期

在用户访问网站的时候 在请求的过程中 会自动附带上cookie这是一个互联网规定在请求的过程中会吧域下的cookie都附带上去 所以当用户在刚刚访问一个网站之后 session cookie 没有过期的时候 攻击者就可以利用 以此来伪造请求 从而达到进攻的目的所以这就是为什么会造成CSRF 漏洞

在说到CSRF的时候有可能有的人会想到这会不会和xss差不多

其实不是这样的

XSS 的名字叫做 跨站脚本攻击 接下来来区分一下这两个漏洞的区别

XSS 和 CSRF 本质上的区别就是 XSS 是攻击者使用受害者的cookie来完成接下来的一系列操作 那么 CSRF就是在受害者不知不觉的情况下来完成后续的操作 或者达到攻击者的目的

CSRF原理:

举一个网上都在举的银行账号的例子 就是受害者小明有一个自己的银行账号 银行账号里面有一定的存款 在想要转账到小明别的银行卡账号的时候 需要向银行官网提交一个请求 (post get)

类似这样的请求http://bank.example/withdraw?account=小明&amount=1000000&for=小明2 这里是get请求 正常情况下 服务器会验证这个请求是否来自于一个合法的session 这时候小明已经登录了 所以这时候小明就是一个合法的了 这个时候小黑也想给自己银行卡上面赚钱 但是小黑没钱 所以小黑想要通过一些途径来把小明账号的钱想办法转到小黑的银行卡里面 那么怎么办呢 小黑是知道 可以通过这个链接http://bank.example/withdraw?account=小明&amount=1000000&for=小黑 可以实现他的想法 但是由于没有权限 因为这里是要把小明的银行卡里面的钱转到小黑中 所以权限是在小明这里的 所以小黑如果发送这个请求是不会成功的 那么是不是只要诱导小明发送这个请求是不是就可以了呢 其实也未必 因为session有一定的时限 过了一段时间之后是会过期的 但是如果小明 在进入了银行登录之后 过了没多久发送了这个请求 那是不是就是可以了 所以小黑就做了一个类似广告等的网站 并且在网站里面插入了这个请求 这样的话小明点到的时候就会发送这个请求了 并且是一个合法的session 这样小明的钱就成功转账到了小黑的账户里面了 然而此时的小明完全不知情

这样就比较好的理解了这个漏洞的用处了

CSRF 的攻击对象是哪些呢

这个漏洞就是黑客借助受害者的cookie 从而取得服务器的信任 通过服务器的认证 黑客这这里无法得到cookie 以及别的信息 黑客所能做到的只有给服务器发送请求 所以黑客攻击的对象也就是我们所保护的对象就是那些可以通过请求来改变一些数据的 对于单纯查看数据的是没有什么问题的

由于refer 是可以伪造 所以这个就不提及了

第二种是添加token

CSRF漏洞之所以可以成功 就是因为这些验证信息都保存在了cookie 中 所以其实黑客也不知道cookie里面有什么 所以为了防止这些情况的发生 我们只需要添加一些黑客无法伪造的信息 而且这些信息是不存在于cookie 中的就可以了 我们可以在http里面添加一个随机生成的token 设置一个机制 来验证token 如果这个请求里面没有token 或者token错误 请求就会被拒绝 token 可以在生成之后放置 因为CSRF漏洞 是黑客可以任意发送请求 有了无法伪造的信息 黑客就无法进行发送请求了 所以可以在用户登录的时候生成token 然后放置在session里面 然后再每次的请求的时候将token从session里面拿出来 然后再和请求中的token 进行比对

关于拿出放进的问题 有get 和post 对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>

当然这个也是有缺点的 有的网站是支持用户发表内容进行上传的 所以黑客只需要把自己的网站发布上去 就可以获得到了token 所以系统可以在添加 token 的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加

PS:黑客可以在上面发布自己个人网站的地址。 然后你在你的网站上面遍历form 或者 a 标签,在其之后添加token,用户点击这些黑客网址之后,token就会作为参数传给黑客网址对应的服务器,黑客也就获取到这个用户对应的token

本文参考文章 https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/index.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注