一、什么是XSS?怎么发生的?

  XSS(Cross site scripting)全称为跨站脚本攻击,是web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如Javascript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。比如获取用户的cookie,导航到恶意网站,携带木马病毒等。

  

二、XXS漏洞的分类

  XXS漏洞按照攻击利用手法的不同,有以下三种类型:

  类型A,本地利用漏洞:这种漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:

    Alice给Bob发送了一个恶意构造了web的URL。

    Bob点击并查看了这个URL。

    恶意页面中的Javascript打开了一个具有漏洞的HTML页面并将其安装在Bob电脑上。

    具有漏洞的HTML页面包含了在Bob电脑本地域执行的Javascript。

    Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。

  类型B,反射式漏洞:这种漏洞和类型A有些类似,不同的是web客户端使用server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。其攻击过程如下:;

    Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行账户信息)。

    charly发现Bob的站点包含反射性地XSS漏洞。

    charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。

    Alice在登陆到Bob的站点后,浏览charly提供的URL。

    嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。

    此脚本盗窃敏感信息(授权、信用卡、账号信息等),然后在Alice完全不知情的情况下将这些信息发送到charly的web站点。

  类型C,存储式漏洞:该类型是应用最为广泛而且有可能影响到web服务器自身安全的漏洞。骇客将攻击脚本上传到web服务器上,使得所有访问该页面的用户都面临信息泄露的可能,其中包括了web服务器的管理员。其攻击过程如下:

    Bob拥有一个web站点,该站点允许用户发布信息/浏览已发布的信息。

    charly注意到Bob的站点具有类型C的XSS漏洞。

    charly发布一个热点信息,吸引其他用户纷纷阅读。

    Bob或是任何的其他人如Alice浏览了该信息,其会话cookie或其他信息将被charly盗走。

  类型A直接威胁用户个体,而类型B和类型C所威胁的对象都是企业级web应用。

三、XSS的防御措施

  原则:不相信客户输入的数据

  注意:攻击代码不一定在<script></script>中

  1.将重要的cookie标记为http only,这样的话JavaScript中的document.cookie语句就不能获取到cookie了

  2.只允许用户输入我们期望的数据。例如:年龄的textbox中,只允许用户输入数字,而数字之外的字符都过滤掉。

  3.对数据进行HTML encode 处理

  

  4.过滤或移除特殊的HTML标签,例如:<script>,<iframe>,&lt;for<,&gt;for>,&quot for

  5.过滤JavaScript事件的标签,例如"onclick=","onfocus"等。

四、测试XSS漏洞

  方法一:查看代码,查找关键的变量,客户端将数据传送给web服务器。一般通过三种方式Querystring,From表单,以及cookie。例如在ASP的程序中,通过request对象获取客户端的变量。

  

    假如变量没有经过HTMLEncode处理,那么这个变量就存在一个XSS漏洞。

  方法二:准备测试脚本

    在网页中的textbox或其他能输入数据的地方,输入这些测试脚本,看能不能弹出对话框,能弹出的话,说明存在XSS漏洞。

    在URL中查看有哪些变量通过URL把值传给了web服务器,把这些变量的值退换成我们测试的脚本。然后看我们的脚本是否执行。

  方式三:自动化测试XSS漏洞

    现在已经有很多XSS扫描工具了。实现XSS自动化测试非常简单,只需要用HttpWebRequest类。把包含XSS测试脚本,发送给web服务器,然后查看HttpWebResponse中,我们的XSS测试脚本是否已经注入进去了。

XSS攻击(跨站脚本攻击)的更多相关文章

  1. thinkphp 防止XSS(跨站脚本攻击)

    XSS(跨站脚本攻击)可以用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案: 直接过滤所有的JavaScript脚本: 转义Html元字符,使用htmlentities.htm ...

  2. xss(跨站脚本攻击)

    xss(跨站脚本攻击) 原理:攻击者可以通过在页面中注入恶意链接或者脚本代码,当受害者访问时,脚本代码会在其浏览器中执行,这个时候,我们可以获取当前用户的cookie或者进行重定向等操作. xss造成 ...

  3. 聊两句XSS(跨站脚本攻击)

    XSS(跨站脚本攻击),聊两句,五毛的. XSS的危害: 窃取Cookie,盗用用户身份信息 这玩意儿是大多数XSS的目标,也好解决,可以先治个标,直接设置HttpOnly=true ,即不允许客户端 ...

  4. web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造)

    web 安全 & web 攻防: XSS(跨站脚本攻击)和 CSRF(跨站请求伪造) XSS(跨站脚本攻击)和CSRF(跨站请求伪造) Cross-site Scripting (XSS) h ...

  5. XSS防跨站脚本攻击-AntiSamy的基本使用

    XSS:跨站脚本攻击(Cross Site Scripting),为不和 CSS混淆,故将跨站脚本攻击缩写为XSS.XSS是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页时,嵌入其 ...

  6. XSS(跨站脚本攻击)的最全总结

    从OWASP的官网意译过来,加上自己的理解,算是比较全面的介绍.有兴趣的可私下交流. XSS 跨站脚本攻击 ============================================== ...

  7. 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

  8. Magicodes.WeiChat——使用AntiXssAttribute阻止XSS(跨站脚本攻击)攻击

    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插 ...

  9. Web安全测试之XSS(跨站脚本攻击)

    XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的 ...

  10. XSS【跨站脚本攻击】

    从客户端(txt="<script><a href="www...")中检测到有潜在危险的 Request.Form 值. 如果你使用的是.NET 3. ...

随机推荐

  1. 数据显示按规格向datatable中增加空白记录

    /// <summary> /// 按前台分页样式为datatable增加空行 /// </summary> /// <param name="gridPage ...

  2. DevExpress的TreeList实现显示本地文件目录并自定义右键实现删除与重命名文件

    场景 使用DevExpress的TreeList显示本磁盘下文件目录并在树节点上右键实现删除与添加文件. 效果 自定义右键效果 实现 首先在包含Treelist的窗体的load方法中对treelist ...

  3. 关于async function(){ let res = await } 详解

    本文引自: https://www.jianshu.com/p/435a8b8cc7d3 async function fn(){ //表示异步,这个函数里面有异步任务 let result = aw ...

  4. jquery.wordexport.js打印echarts.js画出的柱状图

    jquery.wordexport.js打印echarts.js画出的柱状图. echarts画出的图是不能直接打印出来的(echarts的柱状图是用canvas画出来的),而jquery.worde ...

  5. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之五:安装SQL Server

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  6. SQL,case ziduan when ziduan_value then 'result'

    case a.sex when 0 then '女' when 1 then '男' else '其他' end as sex 当a表的性别字段的value为0时将查询的value转换成 '女',当字 ...

  7. Python虚拟环境导出包安装到另一台电脑的方法

    环境:Windows 版 Python Python 3.6.8可以用自带的命令建立虚拟环境,不用安装另外的如 virtualenv.virtualenvwrapper等工具. python -m v ...

  8. Unity如何更改精灵中心点

      Unity虽然可以改中心点但是仅支持几个特定位置. 如果是一个你是切割的精灵,则可以进入精灵编辑器中调整 打开精灵编辑器后按调整如下图所示的pivot选项,我在这里把精灵调整成了右上. 在精灵编辑 ...

  9. acwing 116. 飞行员兄弟

    地址  https://www.acwing.com/problem/content/118/ “飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱. 已知每个把手可以处于以下两种状态之 ...

  10. Go 字节 (byte) & 文字符号 (rune)

    byte 通过 byte 定义一个字节,字节必须使用单引号包起来,直接打印字节输出的是 ascii 码,需要通过格式化输出 byte 是 uint8 的别称,使用 byte 主要是为了区分字节和无符号 ...