浏览器的同源策略限制了一些跨域行为,但仍有些特例(img、iframe、script标签)不受跨域限制,这就给XSS攻击创造了机会(这完全不是同源策略的锅,一定是程序员的锅)。

  在讲下面的内容前,还是要提一下Cookie,Cookie是用来辨别用户身份的重要依据。来做个形象的比喻,有一天,小A去了一家新开的理发店,店里的托尼老师不认识小A,于是小A就办了一张VIP卡,当小A第二次去这家理发店的时候,店里的托尼老师刷了下小A的卡,想起来了你是小A啊,今天搞什么样的造型啊~ Cookie就是那张VIP卡,用于辨别用户身份。

  Cookie包含以下几个属性

  采用 Name = Value 的键值对形式存储数据,Name是唯一的

  Domain:域名,限制哪些域名下可以使用(该VIP卡仅限本店使用)

  Path:路径,只有这个路径前缀的才可用(该VIP卡仅限烫头)

  Expires:过期时间(该VIP卡有效期一年)

  HTTP(HTTPOnly):只有浏览器请求时,才会在请求头中带着,JavaScript无法读写

  Secure:非HTTPS请求时不带

  SameSite:用于定义cookie如何跨域发送

  Cookie就先简单说到这里,回到XSS攻击,后续讲到的XSS和CSRF攻击都会围绕着怎么获取Cookie来举例。

  XSS(Cross-site-Script跨站脚本攻击),通常是带有页面可解析内容的数据未经处理直接插入到页面上解析造成的。XSS根据攻击脚本的引入位置来区分为存储型XSS、反射型XSS以及MXSS(也叫DOM XSS)三种。

根据上面的描述来举个例子:
         假设有一个论坛存在XSS漏洞,用户小A在该论坛的一篇帖子中留言到

  当小A写的留言被该论坛保存下来之后,如果有其他的用户看到了这条评论(相当于打开了这个页面,执行了hark.js,hark.js里面内容大致是获取Cookie,发送请求),那么这些用户的Cookie都会发送到小A事先写好的信息收集网站中进行保存,然后小A就可以用这些Cookie进行登录啦。

  上述这种XSS攻击属于存储型,提交的代码会被存储在服务器端,下次请求目标网站时不用再提交XSS代码。所以这种类型的主要原因是前端提交的数据未经处理直接存储到数据库,然后从数据库中读取出来后直接插入到页面中导致的。

继续讲故事:

假设有一个网站lalala存在XSS漏洞,网址是http://www.lalala.com。然后有一天小A在邮件里发现一封邮件,内容是一张你懂得图片然后配下面的标签。

  小A好奇啊,然后就点了进去,如果在此之前小A登录过lalala网站,那么他的Cookie就被盗走了。

  这种XSS攻击属于反射型,发出请求时,XSS代码出现在URL中,作为输入提交到服务器,服务器解析后响应,XSS代码随着响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫做反射型XSS。

  MXSS则是在渲染DOM属性时将攻击脚本插入DOM属性中被解析而导致的。

至此,三种类型的XSS攻击都描述完了,你看确实都是程序员的锅吧。

服务端可以做以下动作:

1、刚刚上面讲到Cookie中有个属性时HTTP,设置为True,不允许JavaScript读取cookies,但该属性只适配部分浏览器。对于HTTPS可以设置Secure

2、处理富文本框输入内容,进行XSS过滤,过滤类似script、iframe、form等标签以及转义存储

客户端可以做以下动作:

1、输入检查,和服务端一样都要做。
         2、输出检查,编码转义,如果使用jquery,就是那些append、html、before、after等,插入DOM的方法需要注意。现今大部分的MV*框架在模板(view层)会自动处理XSS问题。

XSS攻击的危害是很大的,像上面的例子注入script可以执行任何的JS代码(意味着可以获取cookie等信息了),注入style可以把页面全部弄崩。尤其是具有评论功能的网站需要注意防范此类攻击,不要相信客户端发送过来的任何数据!还有就是不要乱点开奇奇怪怪的链接啦~

带你了解CSRF和XSS(一)的更多相关文章

  1. 带你了解CSRF和XSS(二)

    什么是CSRF? CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XS ...

  2. 面试 07-安全问题:CSRF和XSS

    07-安全问题:CSRF和XSS #前言 面试中的安全问题,明确来说,就两个方面: CSRF:基本概念.攻击方式.防御措施 XSS:基本概念.攻击方式.防御措施 这两个问题,一般不会问太难. 有人问: ...

  3. CSRF和XSS

    XSS(跨站脚本攻击): 攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击 XSS是什么?它的全名是:Cross-site scriptin ...

  4. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  5. 常见的 CSRF、XSS、sql注入、DDOS流量攻击

    CSRF攻击 :跨站请求伪造攻击 ,CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性 攻击者一般会使用吸引人的图片去引导用户点击进 ...

  6. web安全CSRF和XSS

    web端的安全攻击有CSRF和XSS两种,将通过以下三个方面介绍这两种安全攻击: 1.基本概念和缩写 2.攻击原理 3.防御措施 CSRF  1.基本概念和缩写 CSRF(Cross-site req ...

  7. 前端安全问题之CSRF和XSS

    一.CSRF 1.什么是 CSRF CSRF(全称 Cross-site request forgery),即跨站请求伪造 2.攻击原理 用户登录A网站,并生成 Cookie,在不登出的情况下访问危险 ...

  8. Django信息安全相关之CSRF和XSS

    什么是xss攻击 xss攻击:黑客把恶意的JS脚本提交到后端,后端把恶意脚本渲染显示出来     什么是CSRF? 1.你登录建行官网后 你的浏览器就保存了建行网站的cokie,(如果不关闭这个页面c ...

  9. Cookie安全与CSRF和XSS攻击知识点收集

    个人简单理解: 1.XSS最简单的理解就是可以在表单提交的内容上嵌入JS执行代码,然后页面渲染的时候没有过滤时会自动执行这个脚本. 2.CSRF可以理解为当你登录了京东,浏览器上保存了你登录的Cook ...

随机推荐

  1. trinitycore 魔兽服务器源码分析(一) 网络

    trinitycore是游戏服务器的开源代码 许多玩家使用魔兽的数据来进行测试 ,使用它来假设魔兽私服. 官方网址  https://www.trinitycore.org/ 类似的还有mangos ...

  2. AX_Currency

    Currency::curAmount(9.23,"HKD");  Currency::curAmount2CurAmount(9.23,"RMB"," ...

  3. Win7 VS2015 x64 MASM汇编语言编写DLL文件

    有点坑记录一下. 首先创建工程时选控制台类型工程,Win32估计就应该选Win32的,反正我测试用的控制台. 然后选DLL类型,除了Empty其他全都去掉. 工程属性,masm勾上. Linker & ...

  4. c语言模拟c++的继承和多态

    //C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout << "A:fun()" < ...

  5. s6-2 UDP

    User Datagram Protocol  UDP 是一个无连接的(connectionless)的传输层协议  UDP传输数据段,无须建立连接  UDP 在 RFC 768中描述  很多 ...

  6. Localization

    Localization (using Histogram Filters) 定位指的是在传感器和移动之间来回的迭代,使得能够保持跟踪目标对象的位置.方向和速度. 这篇将写一个程序来实施定位,与GPS ...

  7. [solution] JZOJ3493 三角形

    [solution] JZOJ3493 三角形 Description 平面上有n个点,求出用这些点可以构成的三角形数. Input 第一行一个整数n. 接下来n行,每行两个整数,表示点的坐标. Ou ...

  8. Python序列结构--列表(一)

    列表 列表**包含若干元素的有序连续内存空间**,当列表增加或删除元素时,**列表对象自动进行内存的扩展或收缩**,从而**保证相邻元素之间没有缝隙**.但插入和删除非尾部元素时涉及列表元素大量的移动 ...

  9. Elastic-search在linux上的安装

    今天是我装第四次 ES ,之前装好用了一段时间,后面莫名其妙爆炸了,炸出一堆异常... 安装环境: JDK1.8   centos    ElasticSearch-6.2.4 jdk1.8以上,所以 ...

  10. git checkout tags with the same name as a branch

    显式指定某个 tag git checkout refs/tags/ git checkout refs/tags/v0.1 显式指定某个 branch git checkout refs/heads ...