前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web安全学习笔记 XSS上

Web安全学习笔记 XSS上

作者头像
Miloce
发布2022-09-28 11:14:37
4560
发布2022-09-28 11:14:37
举报
文章被收录于专栏:鲸云

Web安全学习笔记 XSS上

繁枝插云欣 ——ICML8


  1. XSS的分类和基本认识
  2. XSS的危害
  3. 同源策略的基本认识

一.XSS的分类和基本认识

1. 简介

XSS全称为Cross Site Scripting,为了和CSS分开简写为XSS,中文名为跨站脚本。该漏洞发生在用户端,是指在渲染过程中发生了不在预期过程中的JavaScript代码执行。XSS通常被用于获取Cookie以受攻击者的身份进行操作等行为。

2. 分类

1.反射型XSS

反射型XSS是比较常见和广泛的一类,举例来说,当一个网站的代码中包含类似下面的语句:

代码语言:javascript
复制
<?php echo "<p>hello, $_GET['user']</p>";?> 

那么在访问时设置

代码语言:javascript
复制
/?user=</p><script>alert("hack")</script><p>

则可执行预设好的JavaScript代码。

反射型XSS通常出现在搜索等功能中,需要被攻击者点击对应的链接才能触发,且受到XSS Auditor、NoScript等防御手段的影响较大。

2.储存型XSS

储存型XSS相比反射型来说危害较大,在这种漏洞中,攻击者能够把攻击载荷存入服务器的数据库中,造成持久化的攻击

3.DOM XSS

DOM型XSS不同之处在于DOM型XSS一般和服务器的解析响应没有直接关系,而是在JavaScript脚本动态执行的过程中产生的

例如

代码语言:javascript
复制
<html><head><title>DOM Based XSS Demo</title><script>function xsstest(){    var str = document.getElementById("input").value;    document.getElementById("output").innerHTML = "<img src='"+str+"'></img>";}</script></head><body><div id="output"></div><input type="text" id="input" size=50 value="" /><input type="button" value="submit" onclick="xsstest()" /></body></html>

输入

代码语言:javascript
复制
x' onerror='javascript:alert(/xss/)

即可触发

4.Blind XSS

Blind XSS是储存型XSS的一种,它保存在某些存储中,当一个“受害者”访问这个页面时执行,并且在文档对象模型(DOM)中呈现payload。 它被称为Blind的原因是因为它通常发生在通常不暴露给用户的功能上。


二.XSS的危害

存在XSS漏洞时,可能会导致以下几种情况:

1.用户的Cookie被获取,其中可能存在Session ID等敏感信息。

若服务器端没有做相应防护,攻击者可用对应Cookie登陆服务器。

2.攻击者能够在一定限度内记录用户的键盘输入。

3.攻击者通过CSRF等方式以用户身份执行危险操作。

4.XSS蠕虫。

5.获取用户浏览器信息。

6.利用XSS漏洞扫描用户内网。


三.同源策略的基本认识


1. 简介

同源策略限制了不同源之间如何进行资源交互,是用于隔离潜在恶意文件的重要安全机制。 是否同源由URL决定,URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。

1.1. file域的同源策略

在之前的浏览器中,任意两个file域的URI被认为是同源的。本地磁盘上的任何HTML文件都可以读取本地磁盘上的任何其他文件。

从Gecko 1.9开始,文件使用了更细致的同源策略,只有当源文件的父目录是目标文件的祖先目录时,文件才能读取另一个文件。

1.2. cookie的同源策略

cookie使用不同的源定义方式,一个页面可以为本域和任何父域设置cookie,只要是父域不是公共后缀(public suffix)即可。

不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给定的域以及其任何子域名访问cookie。设置 cookie时,可以使用 domain / path / secure 和 http-only 标记来限定其访问性。

所以 https://localhost:8080/ 和 http://localhost:8081/ 的Cookie是共享的。

1.3. Flash/SilverLight跨域

浏览器的各种插件也存在跨域需求。

通常是通过在服务器配置crossdomain.xml

设置本服务允许哪些域名的跨域访问

客户端会请求此文件,如果发现自己的域名在访问列表里,就发起真正的请求,否则不发送请求。

2. 源的更改

同源策略认为域和子域属于不同的域,例如 child1.a.coma.com/ child1.a.comchild2.a.com / xxx.child1.a.comchild1.a.com 两两不同源。

对于这种情况,可以在两个方面各自设置 document.domain='a.com' 来改变其源来实现以上任意两个页面之间的通信。

另外因为浏览器单独保存端口号,这种赋值会导致端口号被重写为 null


3. 跨源访问

同源策略控制了不同源之间的交互,这些交互通常分为三类:

1.通常允许跨域写操作(Cross-origin writes)

链接(links)

重定向

表单提交

2.通常允许跨域资源嵌入(Cross-origin embedding)

3.通常不允许跨域读操作(Cross-origin reads)

可能嵌入跨源的资源的一些示例有:

代码语言:javascript
复制
<script src="..."></script> 标签嵌入跨域脚本语法错误信息只能在同源脚本中捕捉到
代码语言:javascript
复制
<link rel="stylesheet" href="..."> 标签嵌入CSS由于CSS的松散的语法规则CSS的跨域需要一个设置正确的Content-Type 消息头
代码语言:javascript
复制
<img> / <video> / <audio> 嵌入多媒体资源。
代码语言:javascript
复制
<object> <embed> 和 <applet> 的插件。
代码语言:javascript
复制
@font-face 引入的字体一些浏览器允许跨域字体( cross-origin fonts)一些需要同源字体(same-origin fonts)
代码语言:javascript
复制
<frame> 和 <iframe> 载入的任何资源站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互

3.1. JSONP跨域

JSONP就是利用 <script> 标签的跨域能力实现跨域数据的访问,请求动态生成的JavaScript脚本同时带一个callback函数名作为参数。

服务端收到请求后,动态生成脚本产生数据,并在代码中以产生的数据为参数调用callback函数。

JSONP也存在一些安全问题,例如当对传入/传回参数没有做校验就直接执行返回的时候,会造成XSS问题。没有做Referer或Token校验就给出数据的时候,可能会造成数据泄露。

另外JSONP在没有设置callback函数的白名单情况下,可以合法的做一些设计之外的函数调用,引入问题。这种攻击也被称为SOME攻击。

3.2. 跨源脚本API访问

Javascript的APIs中,如 iframe.contentWindow , window.parent , window.openwindow.opener 允许文档间相互引用。当两个文档的源不同时,这些引用方式将对 windowlocation 对象的访问添加限制。

window 允许跨源访问的方法有

window.blur window.close window.focus window.postMessage

window 允许跨源访问的属性有

window.closed window.frames window.length window.location window.opener window.parent window.self window.top window.window

其中 window.location 允许读/写,其他的属性只允许读

3. 跨源数据存储访问

存储在浏览器中的数据,如 localStorageIndexedDB ,以源进行分割。每个源都拥有自己单独的存储空间,一个源中的Javascript脚本不能对属于其它源的数据进行读写操作。


4. CORS

CORS是一个W3C标准,全称是跨域资源共享(Cross-origin resource sharing)。通过这个标准,可以允许浏览器读取跨域的资源。

4.1. 常见请求头

Origin

代码语言:javascript
复制
预检请求或实际请求的源站URI,浏览器请求默认会发送该字段Origin: <origin>

Access-Control-Request-Method

代码语言:javascript
复制
声明请求使用的方法Access-Control-Request-Method: <method>

Access-Control-Request-Headers

代码语言:javascript
复制
声明请求使用的header字段Access-Control-Request-Headers: <field-name>[, <field-name>]*

4.2. 常见返回头

Access-Control-Allow-Origin

代码语言:javascript
复制
声明允许访问的源外域URI对于携带身份凭证的请求不可使用通配符 *Access-Control-Allow-Origin: <origin> | *

Access-Control-Expose-Headers

代码语言:javascript
复制
声明允许暴露的头e.g. Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header

Access-Control-Max-Age

代码语言:javascript
复制
声明Cache时间Access-Control-Max-Age: <delta-seconds>

Access-Control-Allow-Credentials

代码语言:javascript
复制
声明是否允许在请求中带入Access-Control-Allow-Credentials: true

Access-Control-Allow-Methods

代码语言:javascript
复制
声明允许的访问方式Access-Control-Allow-Methods: <method>[, <method>]*

Access-Control-Allow-Headers

代码语言:javascript
复制
声明允许的头Access-Control-Allow-Headers: <field-name>[, <field-name>]*

4.3. 防御建议

如非必要不开启CORS 定义详细的白名单,不使用通配符,仅配置所需要的头 配置 Vary: Origin 头部 如非必要不使用 Access-Control-Allow-Credentials 限制缓存的时间


5. 阻止跨源访问

阻止跨域写操作,可以检测请求中的 CSRF token

这个标记被称为Cross-Site Request Forgery (CSRF) 标记。

阻止资源的跨站读取,因为嵌入资源通常会暴露信息,需要保证资源是不可嵌入

的。但是多数情况下浏览器都不会遵守 Content-Type 消息头

例如如果在HTML文档中指定 <script> 标记

则浏览器会尝试将HTML解析为JavaScript


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.XSS的分类和基本认识
    • 1. 简介
      • 2. 分类
      • 二.XSS的危害
      • 三.同源策略的基本认识
        • 1. 简介
          • 1.1. file域的同源策略
          • 1.2. cookie的同源策略
          • 1.3. Flash/SilverLight跨域
        • 2. 源的更改
          • 3. 跨源访问
            • 3.1. JSONP跨域
            • 3.2. 跨源脚本API访问
            • 3. 跨源数据存储访问
          • 4. CORS
            • 4.1. 常见请求头
            • 4.2. 常见返回头
            • 4.3. 防御建议
        • 5. 阻止跨源访问
        相关产品与服务
        脆弱性检测服务
        脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档