网络安全与攻防-同源策略

news2024/10/5 7:43:56

目录

同源策略(浏览器控制)

定义

思考:

跨域的N种方法

Jsonp

跨域资源共用(CORS)

 预检(OPTIONS请求)

代理服务(优先考虑)

实战CORS(Fetch+node.js)

小结


同源策略(浏览器控制)

定义

禁止一个源(origin)的脚本&文档和另一个源的脚本&文档交互

  • 两个URL的protocol,port和host相同,那么同源
  • 思考:如果两个源产生过多交互会有什么问题?

 

思考:

  • 为什么不禁用不同源的js?(引用组件,引用cdn,所以禁用是不现实的)
  • 应不应该允许不同源的js修改dom?(允许,CDN上的js改变dom是正常行为)
  • 应不应该允许不同源的js获取远程图片内容?(不允许,不允许远程执行代码)
  • 应不应该允许网站提交数据到不同源的服务器?(不允许,需要同源策略管控,如它收集你的数据,提交给自己服务器了)
  • 应不应该允许网站提交cookie到不同源的服务器?(不允许,除非配置跨域)

跨域的N种方法

确定2个源之间是安全的 可以采用跨域(绕过同源策略)

Jsonp

  • 利用不限制跨域脚本执行的特点
// 服务端数据(data.js)
jsonp('example', {
    a: 1,
    b: 2
})
// index.html 样板代码
function jsonp(topic, data) {
    console.log(topic, data)
}
// 加载跨域数据脚本
var script = document.createElement('script')
script.setAttribute('src', 'data.js')
document.getElementsByTagName('head')[0].appendChild(script)

思考:

  • Jsonp可以用来提交数据吗?(本质上讲是一个script标签发送的get请求,可以提交数据,在路径里拼接,在url的query上,可以提交,但是是不合适的)
  • 尝试为fetch函数扩展jsonp功能
// 扩展代码,实现后的调用
fetch(<jsonp-url>,{method: 'jsonp'})
    .then(data => {
        console.log(data)    
    })

跨域资源共用(CORS)

跨域资源共用(Cross-Origin Resource Sharing)使用额外HTTP头允许指定的源和另一个源进行交互

 

 预检(OPTIONS请求)

 

也是一次请求,消耗带宽,消耗延迟

代理服务(优先考虑)

利用代理将不同源的资源代理到同源的资源

Proxy(node代理)

 具体策略以网络为准,看哪个策略最优

实战CORS(Fetch+node.js)

  • 观察node.js在服务端实现CORS跨域
  • 观察浏览器中fetch的使用方法
  • 观察OPTIONS预检请求
// node服务
const express = require('express')
// 页面1
const app1 = express()
app1.get('/', (req, res) => {
  res.send("hello")
})
app1.listen(3000)
// 页面2
const app2 = express()
app2.options('/api', (req, res) => {
  // 其他源的网站可以跨域访问
  res.set('Access-Control-Allow-Origin' , "*")
  // 请求头加token
  res.set('Access-Control-Allow-Headers', "content-type,token")
  // POST/GET/HEAD 是简单请求,而PUT/DELETE需要授权
  res.set('Access-Control-Allow-Methods', "PUT") 
  res.sendStatus(200)
})
app2.get('/api', (req, res) => {
  res.set('Access-Control-Allow-Origin', '*')
  res.send('go-to')
})
app2.post('/api', (req, res) => {
  // res.set('Access-Control-Allow-Origin', 'http://www.dev.com')
  res.send('go-to')
})
app2.put('/api', (req, res) => {
  res.set('Access-Control-Allow-Origin', 'http://www.dev.com')
  res.send('go')
})
app2.listen(3001)

子域名之间也是跨域的

父子域名之间也是跨域的

fetch('http://dev.com/api,{mode:'no-cors'})

// 200 通了,但是透明请求不返回数据,还是被同源策略管制

小结

  • 理解跨域要解决的问题而不是记住跨域这个现象和处理方法
  • 子域名和父域名交互的时候因为子域名可以修改自己的域为父域名可以解决跨域问题
  • 理解策略要解决的问题,而不是记住处理方法
  • 决定用哪种策略核心的原则是在安全性前提下获得最优效率

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用校正板对无人机影像辐射校正

无人机影像上获取到的数据是反映传感器对光响应的数值特征&#xff08;即DN值&#xff09;&#xff0c;但DN值与环境光强及相机参数有关&#xff0c;只有将其转换为反射率才能较好的反映地物的特征。一般的转换方法是使用二向反射率已知的校正板进行「单点比值」&#xff08;只…

WINNER电比例插装阀放大器

WINNER插装阀分类&#xff1a;双向流量控制阀、提动轴型单向止回常闭比例流量阀、双向流量控制常开比例压力补偿、导压级比例泄压阀、直动型降压比例泄压阀&#xff1b; 比例控制阀是一种按输入的电信号连续、按比例地控制液压系统的流量、压力和 方向的控制阀&#xff0c;其输…

SpringBoot项目的创建和使用

目录 一&#xff0c;SpringBoot 1&#xff0c;什么是SpringBoot 2&#xff0c;SpringBoot的优点 二&#xff0c;SpringBoot项目的创建和使用 1&#xff0c;项目的创建 创建方式 使用Idea创建(统一使用Idea社区版2021.x版本) 使用网页版创建&#xff08;使用Spring官网&a…

(已解决)关键词爬取百度搜索结果,返回百度安全验证,网络不给力,请稍后重试,无法请求到正确数据的问题

已解决&#xff0c;使用关键词进行百度搜索&#xff0c;然后爬取搜索结果&#xff0c;请求数据后&#xff0c;返回的是百度安全验证&#xff0c;网络不给力&#xff0c;请稍后重试。无法请求到正确数据。且尝试在header中增加Accept参数还是不行。 一、问题产生的现象 在学习过…

2024年江苏专转本到底多难?

相比较普通高考的难度来说&#xff0c;专转本的难度不算大且录取率更高一点。所以只要好好复习&#xff0c;上岸还是很容易的。&#xff08;一&#xff09;、语文的难度分析对比2022年及2023年语文的考试情况&#xff0c;考试的难度差别不大&#xff0c;也就是说语文的难度整体…

生产区域人数超员识别监测算法 yolov5

生产区域人数超员监控报警系统通过yolov5python网络模型分析技术&#xff0c;生产区域人数超员识别监测算法模型识别到现场画面区域超员时&#xff0c;立即告知后台中心进行告警提醒及时处理。Yolo意思是You Only Look Once&#xff0c;它并没有真正的去掉候选区域&#xff0c;…

C++初阶(初识命名空间及输入输出)

C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式 等。熟悉C语言之后&#xff0c;对C学习有一定的帮助&#xff0c;本章节主要目标: 1. 补充C语言语法的不足&#xff0c;以及C是如何对C语言设计不合理的地方…

spring boot3.0新特性Http客户端远程调用

1、安装依赖 <!-- For reactive support --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、项目结构 3、新建配置类WebConfig package com.exa…

局域网可使用的远程工具有哪些

推荐一些局域网可使用的远程工具。 1、Splashtop&#xff1a;Splashtop 的效果非常好。 性能出色&#xff0c;拖放文件传输在不同平台之间工作&#xff0c;甚至还有语音聊天。Splashtop Personal 在局域网免费使用&#xff0c;性能出色&#xff0c;是不可多得的免费局域网远程…

进阶项目 01 使用@value注解,@ConfigurationProperties ,@PropertySource和properties文件

这可能是分布式开发的前奏&#xff0c;什么是分布式开发&#xff0c;一般在学校里面写的springboot项目&#xff0c;只有application.properties或者是application.yml文件中的一个配置信息&#xff0c;例如&#xff1a; application.yml文件中&#xff1a; #server server:po…

ServletConfig和ServletContext 的介绍和代码实现

目录 ServletConfig ServletConfig 基本介绍 ServletConfig 类能干什么 为什么需要 ServletContext 1. 方案 1-DB 2. 方案 2-ServletCntext 代码实战 ServletContext ServletContext 基本介绍 ServletContext 可以做什么 代码实战 代码实战2 ServletConfig Servle…

机器学习实战教程(八):多项式回归

多项式回归 概念 线性回归研究的是一个因变量与一个自变量之间的回归问题。 多项式回归是指在线性回归的基础上&#xff0c;通过增加非线性特征来拟合非线性数据的方法。多项式回归模型可以用一个 n 次多项式函数来近似描述目标变量和输入变量之间的关系。例如&#xff0c;对…

在更高的起点创业 专访Aqara重庆服务商,探问「经营秘籍」

从小众产品到大众选择&#xff0c;智能家居在短短几年内迅速崛起&#xff0c;成为各大Shopping Mall的引流神器。而作为一种新消费&#xff0c;智能家居产品也为品牌和渠道在获客方面提出了新的考验。相比传统建材&#xff0c;智能家居如何快速引流&#xff0c;促进成交&#x…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的伽马变换算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回…

Obsidian插件推荐:使用Text Snippets打公式

Obsidian插件推荐&#xff1a;使用Text Snippets打公式 更新&#xff1a;突然发现还有好多可以用的插件&#xff0c;这个可能不是最佳的。比如 Quick Latex for Obsidian和latex suite等 GitHub - ArianaKhit/text-snippets-obsidian: Snippets plugin for obsidian 最近在O…

产品做的好不好,咋判断?

产品做的好不好&#xff0c;咋判断&#xff1f;看优秀公司 怎么拆解分析产品 趣讲大白话&#xff1a;把事情做细致&#xff0c;效果惊人 【趣讲信息科技134期】 **************************** 设计产品是一个复杂学问 市面上很少有成熟的方法 华与华公开了一些&#xff0c;很受…

JavaSE学习进阶day03_03 Object类

第三章 Object类 介绍这个类之前&#xff0c;先回顾一下API&#xff1a; 3.1 概述 java.lang.Object类是Java语言中的根类&#xff0c;即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候&#xff0c;最终找的父类就是Object。 如果一个类没有特别指定父…

二、vue之初体验-案例体验

一、案例体验一&#xff1a;动态展示Hello World数据 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"view…

Java开发 - 配置中心初体验

目录 前言 配置中心介绍 什么是配置中心 Nacos配置中心 数据结构 命名空间 分组 服务 配置中心添加配置 读取配置 本地添加依赖 本地添加配置 测试 结语 前言 前文讲了ELK&#xff0c;ELK说简单也简单&#xff0c;说复杂也复杂&#xff0c;但说实话&#xff0c;微…

【Linux】通过网络版计算器来认识协议

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录 &#x1f449;再谈协议…