信息安全学习笔记--XSS
一、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的更多相关文章
- Web安全学习笔记 XSS上
Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...
- Web For Pentester 学习笔记 - XSS篇
XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给 ...
- 信息安全学习笔记--CSRF
一.CSRF简介 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者“session riding”,通常缩写为CS ...
- XSS漏洞学习笔记
XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...
- Javascript学习笔记三——操作DOM(二)
Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...
- ASP.Net开发基础温故知新学习笔记
申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 两千行PHP学习笔记
亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...
- 20145330第八周《Java学习笔记》
20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...
随机推荐
- 【转载】css3动画简介以及动画库animate.css的使用
原文地址:http://www.cnblogs.com/2050/p/3409129.html 在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好. ...
- HDU3452_Bonsai
题目的意思是给你一个棵树,每天边上有一个权值,现在要想根节点和每个叶子节点完全隔离开来,删除一些边,求最少需要删除的边权值综合是多少? 直接建模,以根节点为汇点,每个叶子节点连接虚拟源点流量无穷,树上 ...
- 【题解】HDU4336 Card Collector
显然,这题有一种很简单的做法即直接状压卡牌的状态并转移期望的次数.但我们现在有一个更加强大的工具——min-max容斥. min-max 容斥(对期望也成立):\(E[max(S)] = \sum_{ ...
- PHP 字符串数组按照拼音排序的问题
拼音排序的规则: 字符串包括特殊字符.数字.英文字符.中文字符等等,排序结果要求,特殊字符排在第一梯队,将其按照首个字符ascii码表进行排序,数字字符排在第二梯队,将首个字符数字按照数字大小排序,英 ...
- Swift中使用MPMoviePlayerController实现自定义视频播放器界面
默认情况下播放器自带各种控制按钮,比如前进后退播放暂停等: var url = NSBundle.mainBundle().URLForResource("1", withExte ...
- Mybatis笔记六:Mybatis中SqlSessionFactoryBuilder/SqlSessionFactory/SqlSession/映射器实例的作用域(Scope)和生命周期
SqlSessionFactoryBuilder 这个类可以被实例化.使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了.因此 SqlSessionFactoryBuilder ...
- Hbase—— rowkey 过滤器(rowfilter)
1.RowFilter 提取rowkey以01结尾数据Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStri ...
- 【整体二分】【P3527】 [POI2011]MET-Meteors
Description 有 n 个国家,总共占有一个环,环被分成了 m 段,已知有 k 次流星雨会落在这个环上的一些位置.再给出每个国家目标收集多少流星,对每个国家求出第几次流星雨后可以满足这个国家的 ...
- Qt 模型/视图/委托
模型.视图.委托 模型/视图架构基于MVC设计模式发展而来.MVC中,模型(Model)用来表示数据:视图(View)是界面,用来显示数据:控制(Controller)定义界面对用户输入的反应方式. ...
- 一次ajax请求导致status为canceled的原因小记
偶然碰到一个小Bug ajax请求执行后返回了一个canceled(状态码) 但是后台却接受了参数并且执行成功0.0 刚看到这个状态的时候是一脸懵逼的.... 之前并没见过这样的状态码 经过参数确认并 ...