一、XSS简介

  XSS (Cross Site Scripting)是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击”,而JavaScript是新型的“ShellCode”。

二、XSS分类

  第一种:反射型XSS

  反射型XSS是最简单的XSS,即输入XSS脚本或输入XSS脚本点击按钮即可完成XSS攻击,同时也称作非持久型XSS。漏洞主要存在于URL地址栏,搜索框等。

  第二种:存储型XSS

  存储型XSS主要是将用户输入的“数据”存储在服务器端,该类型的攻击比较稳定,只要用户访问该数据就会被攻击,所以存储型XSS也叫做持久型XSS。该类型的漏洞主要存在于发帖,回帖评论等模块,以及用户注册等模块。跨站脚本

  第三种:DOM Based XSS

  通过修改页面的DOM节点来进行XSS。

三、XSS原理

  1.反射型XSS

  基本的检测脚本为“<script>alert(1)</script>”,或者为加上简单的HTML闭合语句如类似“><script>alert(1)</script><”的形式。

  主要存在漏洞的位置:

  (1)、URL地址栏

  如URL为“http://www.test.com/test.php?id=123”的形式,可能存在XSS,可以用加上检测语句如“<script>alert(1)</script>”、“><script>alert(1)</script><” 、“’><script>alert(1)</script><’”等来进行XSS检测。

  (2)、搜索框

  搜索框的检测方式同URL地址栏的检测方式基本一致,但是其中有一点不同就是如果需要闭合HTML标签时的语句有一些不一样。需要改变成类似“%'><script>alert(1)</script><'%'='”的语句,因为搜索框的闭合方式同一般的闭合有所差别。

  (3)、登录框

  登录框基本和URL地址栏是相同的,语句基本一致,如果不需要闭合标签则可直接输入“<script>alert(1)</script>”验证,如需要闭合标签则加上对应的闭合标签即可。

  2.存储型XSS

  存储型的XSS主要体现为论坛等地方,攻击者可以在论坛中发表包含有XSS代码的文章,用户一旦访问该文章就会遭受到攻击,所以这种攻击方式也被称为持久型攻击,存储型XSS的重点以及难点在于如何构造form表单,以及如何闭合form表单。

  简单的存储型XSS如在留言板中进行,如果不需要闭合标签,就可以直接用“<script>alert(1)</script>”这样的语句来进行验证,如果需要闭合,则可用类似“’><script>alert(1)</script><’”来进行验证。

  3.DOM Based XSS

  DOM Based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如URI ,location等。客户端脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM Based XSS漏洞。

  DOM Based XSS攻击源于DOM相关的属性和方法,被插入用于XSS攻击的脚本。一个典型的例子如下:

  HTTP请求"http://www.test.com/hello.html?name=test"使用以下的脚本打印出登录用户test的名字,即

  <SCRIPT>

    var pos=docmnent.URL.indexOf(“name=”)+5;

    document.write(document.URL.substring(pos,document.URL.length));

  </SCRIPT>

  如果这个脚本用于请求http//www.test.com/hello.html?name=<script>alert(1)</script>时,就导致XSS攻击的发生。当用户点击这个链接,服务器返回包含上面脚本的HTML静态文本,用户浏览器把HTML文本解析成DOM,DOM中的document对象URL属性的值就是当前页而的URL。在脚本被解析时,这个URL属性值的一部分被写入HTML文本,而这部分HTML文本却是JavaScript脚本,这使得<script>alert(1)</script>成为页面最终显示的HTML文本,从而导致DOM Based XSS攻击发生。

三、XSS防御

  1.启用HttpOnly

  启用HttpOnly并不能防止XSS,但可以有效的解决XSS攻击之后的cookie劫持问题。

  但是在Apache中支持的一个header是TRACE,可以绕过HttpOnly。

  2.输入检查

  常见的web漏洞如SQL注入,XSS都是攻击者构造一些特殊的字符,然后进行攻击,而这些字符正常用户是不会用到的。所以要对用户输入的数据进行过滤。比如注册时的电话,邮箱,生日等要有一定的规范。

  可以利用黑名单或白名单的方式。

  3.输出检查

  一般来说,除了富文本的输出之外,在变量输出到HTML页面之前,可以使用编码或转义的方式来防御XSS攻击。

  可以采用安全的编码函数、多种编码方式并存等方式来防御XSS。

  4.正确的预防XSS

  想要正确的预防XSS,必须要了解XSS的成因,造成XSS的罪魁祸首是变量,变量可以存在的场景有:在HTML标签中输出、在HTML属性中输出、在<script>标签中输出、在事件中输出、在CSS中输出、在地址中输出等。

  要严格检查这些地方的变量,以此来正确的预防XSS。

  5.处理富文本

  富文本主要是用户自定义的HTML代码,这种代码风险性比较高,处理富文本时,主要用到输入检查。而且在检查时应该使用白名单,避免使用黑名单。

  (通过学习和理解整理了关于XSS的知识,记录下来)

信息安全学习笔记--XSS的更多相关文章

  1. Web安全学习笔记 XSS上

    Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...

  2. Web For Pentester 学习笔记 - XSS篇

    XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给 ...

  3. 信息安全学习笔记--CSRF

      一.CSRF简介   CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者“session riding”,通常缩写为CS ...

  4. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  5. Javascript学习笔记三——操作DOM(二)

    Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...

  6. ASP.Net开发基础温故知新学习笔记

    申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...

  7. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  8. 两千行PHP学习笔记

    亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...

  9. 20145330第八周《Java学习笔记》

    20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...

随机推荐

  1. ucontext-人人都可以实现的简单协程库

    ucontext的介绍 http://blog.csdn.net/qq910894904/article/details/41911175 协程的介绍 https://en.wikipedia.org ...

  2. UVAlive5135_Mining Your Own Business

    好题.给一个无向图,求最少染黑多少个点后,使得任意删除一个点,每一个点都有与至少一个黑点联通. 一开始的确不知道做.看白书,对于一个联通分量,如果它有两个或以上的割点,那么这个分量中间的任何一个点都是 ...

  3. Spring、MyBatis和SpringMVC整合的jar包下载

    spring mvc的jar包下载:http://repo.springsource.org/libs-release-local/org/springframework/spring/我下载的5.0 ...

  4. nginx配置虚拟路径下载文件(.apk)

    公司将安卓apk文件放到服务器上,实现用户点击链接并下载 nginx version 1.14.1 nginx配置修改 server { listen 80; server_name localhos ...

  5. MT【158】只在此山中,云深不知处

    求证:方程$3ax^2+2bx-(a+b)=0(b\ne0)$在$(0,1)$内至少有一个实数根. 提示:$f(0)=-(a+b),f(\dfrac{2}{3})=\dfrac{1}{3}(a+b)$ ...

  6. MT【134】待定系数

    已知\(a,b>0\)且\(ab(a+b)=4\),求\(2a+b\)的最小值______. 解答:\(\sqrt{3}(2a+b)\ge(\sqrt{3}+1)a+b+(\sqrt{3}-1) ...

  7. 关于PHP 时区错误的问题

    php的ini文件中时区配置默认为关闭状态 这会导致调用时间函数时出错,所以要开启时区并且配置自己的时区: 查询手册找到所有的时区有: 所以修改配置为: 重启apache问题解决

  8. Linux系统启动详解(三)

    上节已系统initramfs已启动完成,将系统控制权交给了真正的rootfs的/sbin/init,下面就是/sbin/init干活的时间了. 4       /sbin/init initramfs ...

  9. 丁酉年六月十一ACM模拟赛

    似乎该写题解了.今天模拟ACM,10道题(本来还有2道被删了),9道都来自BZOJ,中间我做过2道.那么说,今天Solv.便大大增多了(但还是不如强大的Amphetamine). 题单及一句话题解如下 ...

  10. bzoj5016 一个简单的询问

    这种不可直接做的问题 数据范围又很小 考虑莫队 但是,l1,l2,r1,r2四维? 考虑把询问二维差分! f(a,b)表示,询问[1,a],[1, b]的答案 所以,ans(l1,r1,l2,y2)= ...