1.概念
  xss一般分为两类,反射型和存储型。
  反射型xss指的是客户端的不安全输入而引起的攻击,例如:
  在某网站搜索,搜索结果会显示搜索的关键词,搜索时关键词填入<script>alert('1')</script>,然后点击搜索。如果页面没有对关键词进行过滤及代码转换,这段代码就会直接在页面上执行,弹出 1。
 
  存储型xss指的提交带有恶意脚本内容的数据到服务器上,而在其他用户看到这些内容时,发起攻击。
 
2.应对之道
(1)对于输出到html的输入内容,采用过滤关键词的方式,把预设的关键词转换成字符实体,例如将< >转换成&lt; 和 &gt; 。
(2)Content-Security-Policy(内容安全策略) 简称 csp
  即只允许页面向我们允许的域名发起跨域请求,而不符合策略的恶意攻击则被阻挡。csp需要在Response Headers中添加 ,请看例子:
 
● js仅允许本站资源或https://apis.google.com的资源
Content-Security-Policy: script-src 'self' https://apis.google.com
  
● js仅允许本站资源,图片允许所有资源,media类型仅允许本站资源,font类型允许本站及fonts.gstatic.com的资源
Content-Security-Policy: default-src 'none'; script-src 'self'; img-src * data:; media-src 'self' ; font-src 'self' fonts.gstatic.com;
 
● 允许本站的资源,图片允许所有资源, js仅允许 http://trustedscripts.example.com下的资源。
Content-Security-Policy: default-src ‘self’; img-src *;script-src http://trustedscripts.example.com
  指令集:
    default-src:默认行为,所有未单独指定的指令都会按照这个来执行
    script-src: 用于限制js的来源只能是后面跟着的地址,其他都不执行
    style-src: 控制样式表@import和rel时所引入的URI资源
    img-src: 用于定义可从中加载图像的来源。
    media-src: 用于限制允许传输视频和音频的来源。
    object-src: 可对 Flash 和其他插件进行控制。
    base-uri: 用于限制可在页面的 <base> 元素中显示的网址。
    child-src: 用于列出适用于工作线程和嵌入的帧内容的网址。例如:child-src https://youtube.com 将启用来自 YouTube(而非其他来源)的嵌入视频。 使用此指令替代已弃用的 frame-src 指令。
    connect-src: 用于限制可(通过 XHR、WebSockets 和 EventSource)连接的来源。
    font-src: 用于指定可提供网页字体的来源。Google 的网页字体可通过 font-src https://themes.googleusercontent.com 启用。
    form-action: 用于列出可从 <form> 标记提交的有效端点。
    frame-ancestors: 用于指定可嵌入当前页面的来源。此指令适用于 <frame>、<iframe>、<embed> 和 <applet> 标记。此指令不能在 <meta> 标记中使用,并仅适用于非 HTML 资源。
    plugin-types: 用于限制页面可以调用的插件种类。
    upgrade-insecure-requests: 指示 User Agent 将 HTTP 更改为 HTTPS,重写网址架构。 该指令适用于具有大量旧网址(需要重写)的网站。
 
  填写项:
    主机名:example.org,https://example.com:443
    路径名:example.org/resources/js/
    通配符:*.example.org,*://*.example.com:*(表示任意协议、任意子域名、任意端口)
    协议名:https:、data:
    'self':当前域名,需要加引号
    'none':禁止加载任何外部资源,需要加引号
    多个值也可以并列,用空格分隔。
 
  script-src 的特殊值
    除了常规值,script-src还可以设置一些特殊值。注意,下面这些值都必须放在单引号里面。
    'unsafe-inline':允许执行页面内嵌的&lt;script>标签和事件监听函数
    unsafe-eval:允许将字符串当作代码执行,比如使用eval、setTimeout、setInterval和Function等函数。
    nonce值:每次HTTP回应给出一个授权token,页面内嵌脚本必须有这个token,才会执行
    hash值:列出允许执行的脚本代码的Hash值,页面内嵌脚本的哈希值只有吻合的情况下,才能执行。
    nonce值的例子如下,服务器发送网页的时候,告诉浏览器一个随机生成的token。
 
  注意点
    ● script-src和object-src是必设的,除非设置了default-src。
      因为攻击者只要能注入脚本,其他限制都可以规避。而object-src必设是因为 Flash 里面可以执行外部脚本。
    ● script-src不能使用unsafe-inline关键字(除非伴随一个nonce值),也不能允许设置data:URL。
 
(3)x-frame-options(X框架选项)
  本选项的主要作用是避免钓鱼iframe,也就是防止本网页被其他人放在iframe中使用。
  它有3个选项:
    DENY:不允许任何网页iframe嵌套本网页
    SAMEORIGIN:只有当父网页与本网页的域名相同时,才允许嵌套
    ALLOW-FROM http://xxx.com/:只有父网页域名等于该域名时,才允许嵌套
 
  而不指定x-frame-option时,默认允许所有网页嵌套
  另外也支持meta标签设置,但content中仅支持上述前两个选项。
  

<meta http-equiv="X-Frame-Options" content="deny">,
  
 
(4)x-content-type-options(X内容类型选项)
  x-content-type-options是用来限制客户端Content-type响应头必须遵循MIME类型。
  它仅有一项选择:X-Content-Type-Options: nosniff,意思是禁用浏览器对文档类型的自动判断。
  这是因为有时候你的资源的Content-Type是错的或者未定义,这时,浏览器会使用MIME-sniffing嗅探该资源的类型,最终渲染执行,从而导致漏洞的出现。
  举个例子:
  某php网页在某不支持php的服务器上运行,如果没有设置Content-Type,则php会被解释为纯文本或者html,此时就会直接打印出来里面的所有内容。
 
(5)x-xss-protection(浏览器xss防护选项)
  XSS filter/auditor是浏览器厂商(IE、webkit浏览器)内置的针对xss攻击的防护机制,设置很简单,只需要在response中,添加x-xss-protection字段,告知浏览器该如何工作。
  它也有3项可供选择:
  0: 表示关闭浏览器的XSS防护机制
  1:删除检测到的恶意代码, 如果响应报文中没有看到X-XSS-Protection 字段,那么浏览器就认为X-XSS-Protection配置为1,这是浏览器的默认设置
  1; mode=block:如果检测到恶意代码,不渲染恶意代码
  推荐使用 1; mode=block。
 

XSS(跨域脚本攻击)应对之道的更多相关文章

  1. CSRF跨站请求伪造与XSS跨域脚本攻击讨论

    今天和朋友讨论网站安全问题,聊到了csrf和xss,刚开始对两者不是神明白,经过查阅与讨论,整理了如下资料,与大家分享. CSRF(Cross-site request forgery):跨站请求伪造 ...

  2. 解决跨域脚本攻击 XSS

    配置Content Security Policy    传送门:作者: 阮一峰 http://www.ruanyifeng.com/blog/2016/09/csp.html [前端安全]JavaS ...

  3. XSS跨站点脚本攻击

    XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS. 以下为Jav ...

  4. HTTP攻击与防范-跨网站脚本攻击

    实验目的 1.了解XSS -跨网站脚本攻击带来的危险性. 2.掌握XSS -跨网站脚本攻击的原理与方法 3.掌握防范攻击的方法 实验原理 跨网站脚本攻击之所以会发生,是因为网站的Web应用程序对用户的 ...

  5. ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

  6. 跨站点脚本攻击XSS

    来源:http://www.freebuf.com/articles/web/15188.html 跨站点脚本攻击是一种Web应用程序的攻击,攻击者尝试注入恶意脚本代码到受信任的网站上执行恶意操作.在 ...

  7. IBM Rational AppScan:跨站点脚本攻击深入解析

    IBM Rational AppScan:跨站点脚本攻击深入解析    了解黑客如何启动跨站点脚本攻击(cross-site scripting,XSS),该攻击危害(及不危害)什么,如何检测它们,以 ...

  8. XFS: Cross Frame Script (跨框架脚本) 攻击。

    一.Cross Frame Script (跨框架脚本) 攻击什么是Cross Frame Script?很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开 ...

  9. Cross Frame Script (跨框架脚本) 攻击

    一.Cross Frame Script (跨框架脚本) 攻击 什么是Cross Frame Script? 很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器 ...

随机推荐

  1. 采用JSP+JavaBean的方式进行简单的实现用户的网页登陆实例

    我们都知道J2EE中的Model1开发模式,那么下面就让我们一起简单的进行一下回顾,其主要是体现了一个初步的分层的思想: jsp层,业务逻辑层,以及我们的数据库层,主要的作用分别为,jsp层负责与用户 ...

  2. SVM实验

    说明: 1)α2=0表示第二个样例不在分类面上,在分类面上的点αi均不为零. 2)二次项矩阵,可以通过矩阵相乘相加方法得到,如上例 3)目标函数变为负值,是为了照顾matlab的标准型. 假定应用多项 ...

  3. Java的依赖注入(控制反转)

    两个主角"依赖注入"和"控制反转": 1.二都说的都是同一件事,只是叫法不同.是一个重要的面向对象编程的法则,也是一种设计模式: 2.英文原称:依赖注入,Dep ...

  4. MySql常用操作语句(2:数据库、表管理以及数据操作)

    本文主要内容转自一博文. 另外可供参考资源: SQL语句教程 SQL语法 1.数据库(database)管理  1.1 create 创建数据库 mysql> create database f ...

  5. c语言部分库函数,代码实现,以及细节理解

    代码来自: http://blog.csdn.net/v_JULY_v //得9 分 //为了实现链式操作,将目的地址返回,加2 分! char * strcpy( char *strDest, co ...

  6. Gradle 1.12用户指南翻译——第四十四章. 分发插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  7. 给大家推荐一个python的学习网站 http://www.codecademy.com

    注册之后,可以跟着指导,自己编码学习,比较方面: 再推荐一个在线编译的代码网站,c/c++ python  都可以: http://codepad.org

  8. 新闻网站开发-手机端-基于Wordpress

    暂时写下来下面记录整个网站制作流程,由于是边学便用,代码质量和性能不能保证,仅仅为之前没做过的朋友提供个小小的参考: 下面先贴出网站,记得用手机或者[Opera Mobile Emulator]打开, ...

  9. MakeFile 文件的作用

    makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等).创建程序(make程序)首先读取makefi ...

  10. 基于condition 实现的线程安全的优先队列(python实现)

    可以把Condiftion理解为一把高级的琐,它提供了比Lock, RLock更高级的功能,允许我们能够控制复杂的线程同步问题.threadiong.Condition在内部维护一个琐对象(默认是RL ...