1. 什么是XSS攻击?

正常的页面被渗出了攻击者的js脚本,这些脚本可以非法地获取用户信息,然后将信息发送到attacked的服务端。

XSS是需要充分利用输出环境来构造攻击脚本的

2. 危害

  • 非法获取用户cookie、ip等内容

  • 窃取用户输入的内容

  • 劫持浏览器,形成DDOS攻击

3. 类型

  • Reflected XSS:可以理解为参数型XSS攻击,攻击的切入点是url后面的参数

    // 合法页面
    url: http://aa.com?test=1234
    <input type="text" value={test} /> // result is:
    <input type="text" value="1234" /> // XSS攻击
    url: http://aa.com?test=" /><script>alert('xss')</script>
    <input type="text" value={test} /> // result is:
    <input type="text" value="" /> <script> alert('xss')</script> />
  • stored XSS: 将攻击js脚本上传到服务器端,每次输出时,也随着内容将脚本输出,这样js恶意脚本就可以起到攻击作用。
    // input:
    <textarea>
    hello </div><script src="..."></script>
    </textarea>
    // 将hello及后面的内容一起提交到服务上 //输出上述内容
    <div>
    hello</div><script src="..."></script>
    </div>
  • DOM based XSS:这种攻击方式也是通过URL的参数,但是需要了解正常js的DOM操作,将js脚本注入到页面中
    <div id="inner"></div>
    <script>
    var ele = document.querySelector('#inner');
    var search = window.location.search;
    var age = getAge(search) // 获取search中age的内容
    ele.innerHTML = age; // if url: aa.com?age=23
    <div id="inner">23</div>
    </script> // if url: aa.com?age=</div><script src="..."></script>
    <div id="inner"></div><script src="..."></script>
  • 突变型XSS:是当不可信数据在DOM的innerHTML属性的上下文被处理并通过浏览器发生突变,导致变成一种有效的XSS方向的一种XSS漏洞

4.解决方案

  • 对内容进行编码,包括server、client端均要进行编码。但是不同的内容,就需要采用不同的编码方式。

总体来讲需要对HTML、Attribute、js context、URL、style context、JSON分别进行编码处理。

  • 对html内容进行过滤,例如html purifierjs-xss

  • X-XSS-Protection

    IE8+以上的浏览器均支持该http header,目前goole里面已经添加该属性:

    x-xss-protection:1; mode=block
  • 监控跨站资源:针对csp中存在的问题,进行监控。FEX团队写了几篇非常好的文章:

    【XSS】利用 onload 事件监控跨站资源

    XSS 前端防火墙 —— 内联事件拦截

    XSS 前端防火墙 —— 可疑模块拦截

    XSS 前端防火墙 —— 无懈可击的钩子

    XSS 前端防火墙 —— 天衣无缝的防护

    XSS 前端防火墙 —— 整装待发

  • content security policy(CSP): W3C和各大浏览器厂商均推荐和实践防御XSS的标准,限制执行、请求具有风险的外链资源,攻击者无法将目标信息传出,并对relected XSS进行防御。

    在HTTP的response中部署CSP,指定资源白名单来限制浏览器访问未经允许的外部资源。

    目前Google、facebook、twitter均支持该标准,例如twitter的配置信息:

    content-security-policy:default-src https:;
    connect-src https:; font-src https: data:;
    frame-src https: twitter:; frame-ancestors 'self';
    img-src https: blob: data:; media-src https: blob:;
    object-src https:;
    script-src 'unsafe-inline' 'nonce-w6FV5VZOKta+7JaW7PpR3A==' 'unsafe-eval' https:;
    style-src 'unsafe-inline' https:;
    report-uri https://twitter.com/i/csp_report?a=NVQWGYLXFVZXO2LGOQ%3D%3D%3D%3D%3D%3D&ro=false;

    上述配置的详细参数请参考CSP的相关规范,csp1.0,目前csp1.1草案已经出来。 然而,csp中不允许Eval、inline js、白名单获取远程脚本,这些阻碍着csp的推广。

  • Template Engine:对处理输出内容进行编码,放置恶意代码执行,对stored Xss进行防御。

    例如经常使用handlebars就对输出的内容进行了编码:

    Handlebars HTML-escapes values returned by a {{expression}}.
    If you don't want Handlebars to escape a value,
    use the "triple-stash", {{{. <div class="entry">
    <h1>{{title}}</h1>
    <div class="body">
    {{{body}}}
    </div>
    </div> {
    title: "All about <p> Tags",
    body: "<p>This is a post about &lt;p&gt; tags</p>"
    } result is as below: <div class="entry">
    <h1>All About &lt;p&gt; Tags</h1>
    <div class="body">
    <p>This is a post about &lt;p&gt; tags</p>
    </div>
    </div>
  • Util Lib:提供安全的environment、Encode等工具,避免location、cookie封装对DOM based XSS工具。

    首先在服务端端,对输出的内容进行编码,对request中的内容进行检查编码。

    在客户端,对js获取的widow.location、document.cookie等信息也需要相应处理。

  • 仅可能采用POST而非GET请求方式
  • 严格检查refer

5.参考

https://developer.mozilla.org/zh-CN/docs/Web/Security/CSP

http://www.80sec.com/browser-hijacking.html

https://cure53.de/fp170.pdf

http://www.freebuf.com/articles/web/40520.html

http://www.freebuf.com/articles/web/42727.html

http://blog.knownsec.com/wp-content/uploads/2014/07/%E7%BB%99%E5%BC%80%E5%8F%91%E8%80%85%E7%9A%84%E7%BB%88%E6%9E%81XSS%E9%98%B2%E6%8A%A4%E5%A4%87%E5%BF%98%E5%BD%95.pdf

XSS 探索的更多相关文章

  1. 探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  2. Samy XSS Worm之源码讲解

    说到Web安全和XSS跨站脚本技术,几乎所有的书都会提到Samy Worm,这是在2005年感染了mySpace社交网络上百万用户的蠕虫.正如Morris蠕虫是互联网第一个蠕虫, Samy Worm则 ...

  3. 组合拳出击-Self型XSS变废为宝

    前言 作者:米斯特安全攻防实验室-Vulkey_Chen 博客:gh0st.cn 这是一个鸡肋性质的研究,也许有些标题党,请见谅- 本文启发于一些讨论,和自己脑子里冒出来的想法. 组合拳搭配 Self ...

  4. " XSS易容术---bypass之编码混淆篇+辅助脚本编写"

    一.前言本文原创作者:vk,本文属i春秋原创奖励计划,未经许可禁止转载!很多人对于XSS的了解不深.一提起来就是:“哦,弹窗的”.”哦,偷cookie的.”骚年,你根本不知道什么是力量.虽然我也不知道 ...

  5. XSS事件(一)

    前言 ​ 最近做的一个项目因为安全审计需要,需要做安全改造.其中自然就包括XSS和CSRF漏洞安全整改.关于这两个网络安全漏洞的详细说明,可以参照我本篇博客最后的参考链接.当然,我这里并不是想写一篇安 ...

  6. 从零学习安全测试,从XSS漏洞攻击和防御开始

    WeTest 导读 本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础.XSS基础.编码基础.XSS Payload.XSS攻击防御. 第一部分:漏洞攻防基础知识   XSS属于漏洞攻防,我们要研究 ...

  7. XSS漏洞之加载远程js文件

    这次在对一个系统渗透测试过程中,发现一个XSS漏洞,可弹窗,并且没有httponly 但是在尝试加载远程js文件的时候发现,script标签被过滤掉了,准确的说应该是服务器后端在识别到输入内容有< ...

  8. 2019-11-20:xss学习笔记

    xxe漏洞防御使用开发语言提供的禁用外部实体的方法phplibxml_disable_entity_loader(true); 卢兰奇对象模型,bom由于现代浏览器实现了js交互性方面的相同方法和属性 ...

  9. 探索ASP.NET MVC5系列

    探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)     探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)     探索ASP.NET MV ...

随机推荐

  1. 12.C#yield return和yield break及实际应用小例(六章6.2-6.4)

    晚上好,各位.今天结合书中所讲和MSDN所查,聊下yield关键字,它是我们简化迭代器的关键. 如果你在语句中使用了yield关键字,则意味着它在其中出现的方法.运算符或get访问器是迭代器,通过使用 ...

  2. 08.C# System.Nulable<T>和空引用操作符(四章4.2-4.4)

    看了这3小节,发现作者讲得太详细了,把一个都在正常使用的用法说得太神密了,搞得不知是自己不懂作者的苦心,还是作者用意为之,这里给大家都简单讲下吧,太深的真心讲不下去. 1.可空类型的核心部分是Syst ...

  3. 【转】div居中代码 DIV水平居中显示CSS代码

    原文地址:http://www.divcss5.com/rumen/r622.shtml 如何使用CSS让DIV居中显示,让div水平居中有哪些CSS样式呢? 需要的主要css代码有两个,一个为tex ...

  4. Java设计模式-模板方法模式(Template Method)

    解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,先看个关系 ...

  5. CruiseControl.NET开篇

    在这里说明一下,我终于踏上了CruiseControl.NET这条不归路了,为什么我会觉得是一条不归路,原因很简单,就是这东西在现在这个阶段已经很久没有在园子里有活跃度了,基本上到了已经可以到了让大家 ...

  6. CODEVS 1258 关路灯

    写动归终于能不看题解一次A了!(其实交了两次,一次80一次A) 我练功发自真心! 题目描述 Description 多瑞卡得到了一份有趣而高薪的工作.每天早晨他必须关掉他所在村庄的街灯.所有的街灯都被 ...

  7. 洛谷P2014 TYVJ1051 选课

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  8. jQuery根据下拉列表的选择进行不同的操作

    需求:选择了某个下拉列表选项,进行不同的操作 代码部分: <!doctype html> <html> <head> <meta charset=" ...

  9. 运行 appium 自带实例报错:unresolved import:webdriver

    python demo 中from appium import webdriver报错unresolved import:webdriver 之所以会报这样的error是因为没有装clientclie ...

  10. sixsix团队“餐站”应用M2阶段发布报告

    一.新功能 客户端 搜索功能 我们在M2中实现了对地点的搜索菜品,可以直接在主页页面中的输入框输入用户喜欢的菜品,系统将返回与对应关键字所对应的选择,更加高效直观的满足客户的口味. 菜品图片加载 我们 ...