前端网络安全

news2024/11/18 18:41:19

什么是同源策略

同源指的是:协议、端口号、域名必须一致。他是浏览器的一个用于隔离潜在恶意文件的重要安全机制。

限制了从同一个源加载的文档或脚本,与另一个源的资源进行交互。

同源策略主要限制了三个方面:

  1. 当前域下的js脚本不能够访问其他域下的cookie、localStorage和indexDB。

  1. 当前域下的js脚本不能够访问操作其他域下的DOM。

  1. 当前域下的Ajax无法发送跨域请求。

为什么要有同源策略,他的目的是什么

同源策略的目的主要是为了保证用户的信息安全,它只是对js脚本的一种限制,并不是对浏览器的限制,对于一般的img、或者script脚本的请求都不会有跨域的限制,这是因为这些操作都不会通过响应结果来进行可能出现的安全问题的操作。

解决跨域问题的方案

  1. CORS

  1. JSONP

3.nginx代理跨域

4.nodejs中间件代理跨域

5.WebSocket协议跨域

XSS攻击

什么是XSS攻击

XSS攻击是指跨站脚本攻击,是一种代码注入攻击。攻击者通过网站注入恶意脚本,使之在用户的浏览器上运行,从而窃取用户信息如cookie等。

XSS的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执行。

攻击者可以通过这种攻击方式可以进行以下操作:

  1. 获取页面的数据,如DOM、cookie、 localStorage;

  1. DOS攻击,发送合理请求,占用服务器资源,从而使用户无法访问服务器;

  1. 流量劫持(将链接指向某网站) ;

体验XSS攻击

文件结构如下:

index.js

使用node配置一个服务

const express = require('express')
const path = require('path')
const app = express()

app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

app.get('/', function(req, res, next) {
  res.render('index', { title: 'Express', xss: req.query.xss })
})

app.listen(3000,() => {
   console.log('服务已在3000端口启动');
})

index.html文件内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <%-xss%>
</body>
</html>

这样配置完成之后,我们通过URL的localhost:3000后追加的方式,模拟向服务器请求数据后,服务器将数据返回并渲染到页面上的操作。

如这样

那么当这串代码执行后,就会发生这样的事

由于我这里只是写了一个弹窗,因此并没有造成什么危害,但是一旦<script>标签内,写了一些关于获取cookie的操作,或者是发送恶意请求的操作的话,亦或是操作dom的操作,就会造成很大的危害。

XSS攻击类型

存储型

恶意脚本会存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回并执行。

常见于带有用户保存数据的网站功能:论坛发帖、商品评论、用户私信等。

攻击步骤

  1. 攻击者将恶意代码提交到目标网站的数据库中。

  1. 用户打开目标网站时,网站服务端将恶意代码从数据库中取出,拼接在HTML中返回给浏览器。

  1. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行

  1. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者的指定操作。

反射型

攻击者诱导用户访问一个带有恶意代码的URL后,服务器端接收到数据后处理,然后把带有恶意代码数据发送到浏览器端,浏览器端解析这段带有xss攻击代码后当做脚本执行,最终完成XSS攻击。

常用于网站搜索、跳转等处,由于需要用户主动打开恶意URL链接才能生效,所以常常是一些带有诱导用户点击的形式出现。

攻击步骤

  1. 攻击者构造出特殊的URL ,其中包含恶意代码。

  1. 用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回给浏览器。

  1. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。

  1. 恶意代码窃取用户数据并发送到攻击者网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

DOM型

通过修改页面的DOM节点形成的XSS。

攻击步骤

  1. 攻击者构造出特殊的URL ,其中包含恶意代码。

  1. 用户打开带有恶意代码的URL。

  1. 用户浏览器接收到响应后解析执行,前端JavaScript取出URL中的恶意代码并执行。

  1. 恶意代码窃取用户数据并发送到攻击者网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

与前两种区别:取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞,其余两种都是服务器端的安全漏洞。

如何防御XSS攻击

浏览器的执行防御:一种是使用纯前端的方式,不用服务器端拼接后返回(不适用服务端渲染)。

  另一种是对需要插入到HTML中的代码做好充分的转义。

使用CSP:CSP本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击。

开启方式:一种设置HTTP首部中的Content-Security-Policy

   一种是设置meta标签的方式<meta http-equiv="Content-Security-Policy">

保护敏感信息:cookie使用http-only,使脚本无法获取。

使用验证码,避免脚本伪装成用户执行的一些操作。

CSRF攻击

什么是CSRF攻击

CSRF攻击是指跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者可以利用这个登录状态,绕过后台的用户验证冒充用户向服务器执行一些操作。本质是利用cookie会在同源请求中携带发送到服务器的特点,以此来实现用户冒充。

CSRF攻击类型

GET型

比如在网站中的一个img标签里构建一个请求,当用户打开这个网站的时候就会自动发起提交

<img src="https://search.bilibili.com/all?keyword=%E5%89%8D%E7%AB%AF%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8&from_source=webtop_search&spm_id_from=333.1007&search_source=3" />
POST型

比如构建一个表单,然后隐藏它,当用户进入页面时,自动提交这个表单。

<body onload="document.csrf.submit()">
  <form action="https://search.bilibili.com/all" method="POST" name="csrf">
    <input type="hidden" name="keyword" value="test" />
  </form>
</body>
链接型

比如在a标签的href属性里构建一个请求,然后诱导用户点击

如何防御CSRF攻击

进行同源检测

服务器根据http请求头中oigin或者referer信息来判断请求是否为允许访问的站点,从而对请求进行过滤。当origin或者referer信息都不存在的时候,直接阻止请求。

使用CSRF Token进行验证

服务器向用户返回一个随机数Token,当网站再次发起请求时,在请求参数中加入服务器返回的token,然后服务器对这个token进行验证。

对cookie进行双重验证

服务器在用户访问网站页面时,向请求域名注入一个cookie,内容为随机字符串,然后当用户再次向服务器发送请求的时候,从cookie中取出这个字符串,添加到URL参数中,然后服务器通过对Cookie中数据和参数中数据进行比较来验证。

设置cookie属性的时候设置Samesite,限制cookie不能作为被第三方使用,从而被避免被攻击者利用

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

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

相关文章

waf和web应用防火墙的区别

waf和web应用防火墙有什么区别?相信这两个词大家都不陌生&#xff0c;特别是做互联网行业的小伙伴们。对于waf和web应用防火墙&#xff0c;这两个名词的理解应该都很清楚。但是很多小伙伴们不知道WAF防火墙与Web防火墙有什么区别&#xff0c;它们之间的区别在哪里&#xff0c;…

Spring Cloud(微服务)学习篇(七)

Spring Cloud(微服务)学习篇(七) 1.使用代码的方式实现流量限制规则 1.1 变更SentinelController类 1.1.1 加入的代码 //流控限制 (一个或多个资源限流), postConstruct注解的作用是保证项目一启动就会加载,// 一个rule就是一个规则PostConstructpublic void FlowRule(){Li…

【C++】string的成员函数、成员常量和非成员函数

目录 string 1. string的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 字符串操作 2. string的成员常量 3. string的非成员函数 string 以下…

javaEE 初阶 — 应用层中的 DNS 协议(域名解析系统)

文章目录什么是域名1. 如何建立 域名 与 IP 的对应关系2. 域名的分级什么是域名 域名也就是平常所说的网址&#xff0c;比如 www.baidu.com。 其实网络上的服务器要访问这个网址&#xff0c;需要的是 IP 地址。、 但是 IP 地址比较拗口不方便记忆&#xff0c;于是就有使用一些…

单向非循环链表

1、顺序表遗留问题 1. 中间/头部的插入删除&#xff0c;时间复杂度为O(N) 2. 增容需要申请新空间&#xff0c;使用malloc、realloc等函数拷贝数据&#xff0c;释放旧空间。会有不小的消耗。 3. 当我们以2倍速度增容时&#xff0c;势必会有一定的空间浪费。例如当前容量为100&a…

IDEA这些配置,简单高效

优化导包配置配置路径&#xff1a;File-> settings -> Editor -> General -> Auto ImportAdd unambiguous imports on the fly&#xff1a;自动导包Optimize imports on th fly (for current project)&#xff1a;自动删除无用包代码提示取消大小写配置路径&#x…

AOP(概念和原理)

文章目录1. AOP&#xff08;概念&#xff09;2. AOP&#xff08;底层原理&#xff09;2.1 AOP底层使用动态代理&#xff08;两种&#xff09;2.2 AOP 底层使用哪种代理方式 &#xff1f;3. AOP相关概念3.1 AOP术语4. AOP操作4.1 基于AspectJ实现AOP操作4.2 切点表达式4.3 基于A…

6 分布式事务简介

分布式事务简介 概念 基础概念&#xff1a;事务ACID * A&#xff08;Atomic&#xff09;&#xff1a;原子性&#xff0c;构成事务的所有操作&#xff0c;要么都执行完成&#xff0c;要么全部不执行&#xff0c;不可能出现部分成功部分失 败的情况。 * C&#xff08;Consisten…

嵌入式和Python(一):python环境搭建的详细步骤

目录 ● 安装python ① 更新软件列表 ② 安装编译python需要用到的环境 ③ 下载python源码 ④ 解压源码包 ⑤ 配置 ⑥ 编译 ⑦ 安装 ● 建立软连接 说明 ① 删除原来的软连接 ② 在/usr/bin/目录创建软连接python&#xff0c;定向/usr/local/bin/python3.9 ③ 检查…

Java面向对象:多态特性的学习

本文介绍了Java面向对象多态特性, 多态的介绍. 多态的实现条件–1.发生继承.2.发生重写(重写与重载的区别)3.向上转型与向下转型.4.静态绑定和动态绑定5. 实现多态 举例总结多态的优缺点 避免在构造方法内调用被重写的方法… Java面向对象:多态特性的学习一.什么是多态?二.多态…

MATLAB | 如何将colormap中心点置为0值处?

本期讲有一些绘图时正负部分需要分开赋予颜色&#xff0c;这时候双向colormap的中心对应的可能并不是数值0&#xff0c;该咋办&#xff0c;就比如下面的情况&#xff1a; 事先说明&#xff0c;为了绘图好看&#xff0c;本文中全部示例都在代码最后用了以下这个简单函数进行修饰…

库到底是个啥?为啥要链接,链接库的本质又是个啥?

目录 前言 一、库是个啥&#xff1f; ①最开始的库是用来解决啥问题&#xff1f; ②库的基本构成 ③动态库与静态库 二、如何生成库 0、相关知识 ①生成静态库 ②生成动态库 三、库的使用 ①修改环境变量 ②拷贝.so文件到系统共享库路径下, 一般指/usr/lib ③ldconfig 配置/etc…

安卓逆向_6 --- JNI 和 NDK

Java 本机接口规范内容&#xff1a;https://docs.oracle.com/en/java/javase/19/docs/specs/jni/index.html JNI官方中文资料&#xff1a;https://blog.csdn.net/yishifu/article/details/52180448 NDK 官方文档&#xff1a;https://developer.android.google.cn/training/ar…

【Python学习笔记】第二十八节 Python random 模块

一、Python random简介Python random 模块主要用于生成随机数。大部分python人都会用&#xff0c;但是一般人都是使用randint()帮我们生成某个范围的整数&#xff0c;但其实random模块还有很多非常使用的功能供我们使用&#xff0c;接下来我们就一一了解一下我们的random。要使…

JavaWeb系列之tomcat 服务器安装

文章目录一、JavaWeb应用程序架构B/S 架构C/S 架构B/S 与 C/S 对比MVC设计模式二、MVCMVC 开发项目搭建Web 服务器tomcat 服务器Idea 集成 tomcat第一个 JavaWeb 项目三、JSP 技术jsp 与 servlet 联系与区别一、JavaWeb 简介 JavaWeb 可以理解成使用 java 进行应用程序开发&am…

Windows-jdk8/jdk16安装

Windows-JAVA jdk-8安装教程 下载地址 百度网盘 提取码&#xff1a;Chen 官网 安装jdk8 双击打开下载的安装包 点击下一步 更改安装目录 点击下一步 修改Java安装目录 点击下一步 完成 配置环境变量 按住WindowsR 打开运行窗口 输入 sysdm.cpl 打开系统属性——》高级—…

华为机试题:HJ102 字符统计(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

【Redis】Redis分片集群

【Redis】Redis分片集群 文章目录【Redis】Redis分片集群1. 搭建分片集群1.1 分片集群结构1.2 搭建分片集群1.2.1 集群结构1.2.2 准备实例和配置1.2.3 启动1.2.4 创建集群1.2.5 测试2. 散列插槽2.1 总结3. 集群伸缩4. 故障转移4.1 数据迁移5. RedisTemplate访问分片集群1. 搭建…

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

GEE开发之ERA5&#xff08;气温、降水、压力、风速等&#xff09;数据获取和分析1.ERA5介绍2.初始ERA5数据2.1 DAILY代码2.2 MONTHLY代码3.遥感影像查看&#xff08;DAILY之mean_2m_air_temperature&#xff09;4.逐日数据分析和获取(以mean_2m_air_temperature为例)5.逐月数据…

【Storm】【二】Storm和流处理简介

Storm和流处理简介 一、Storm1.1 简介1.2 Storm 与 Hadoop对比1.3 Storm 与 Spark Streaming对比1.4 Storm 与 Flink对比二、流处理2.1 静态数据处理2.2 流处理一、Storm 1.1 简介 Storm 是一个开源的分布式实时计算框架&#xff0c;可以以简单、可靠的方式进行大数据流的处理…