前端安全之XSS与CSRF

前端安全

XSS

XSS(Cross-Site-Scripting),跨站脚本攻击,因为缩写和 CSS 重叠,被别人抢先了,所以只能叫做 XSS。
攻击者可以利用这种漏洞在网站上注入恶意的客户端代码。若受害者运行这些恶意代码,攻击者就可以突破网站的访问限制并冒充受害者。

举例

假设一个博客网站允许用户发表评论,并将评论内容直接显示在页面上。如果没有进行转义或编码处理,攻击者可以在评论中插入恶意脚本。例如:
用户评论:<script>alert('XSS Attack');</script>
如果评论内容未经过转义或编码,这段恶意脚本将在其他用户浏览该页面时被执行。

<img src="1" onerror="alert(document.cookie)"> 
<a href="javascript:alert('霓虹灯');">是兄弟就来砍我</a>
防御XSS

1、转义:
最常见的方法就是对尖括号标签转义成实体字符存储:

const htmlEncode = function (handleString){return handleString.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/ /g,"&nbsp;").replace(/\'/g,"&#39;").replace(/\"/g,"&quot;");
}

2、内容白名单
比如常规文章、评论富文本,肯定是不需要

3、内容安全性政策 (CSP)
内容安全性政策 (CSP) 是一个可显著降低现代浏览器中 XSS 攻击的风险和影响的防护功能。 它允许网页的作者控制可以从哪里加载和执行JavaScript(和其他资源)。

CSRF

CSRF(Cross Site Request Forgery,跨站域请求伪造)CSRF主要就是在用户看不见的时候使用他们的Cookie来达到自己的目的。
这个漏洞主要依赖于浏览器的cookie是有一定时效的,只要不关闭浏览器或者退出登录,cookie都一直存在。
通常都是将目的隐藏在一个页面中,然后诱导用户去访问这个网站,在用户访问这个页面的时候,这个页面就会利用用户的cookie去向真正的服务器提交一些攻击者伪造的请求。这时候,如果服务器没有验证机制就可以攻击成功了。

防御CSRF

1、Referer Check
在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。通过 Referer Check,可以检查请求是否来自合法的"源"。
Referer Check 不仅能防范 CSRF 攻击,另一个应用场景是 “防止图片盗链”。(防止不了先跳转到源网站再发请求)

2、token
CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

3、验证码
CSRF 攻击往往是在用户不知情的情况下构造了网络请求。而验证码会强制用户必须与应用进行交互,才能完成最终请求。因为通常情况下,验证码能够很好地遏制 CSRF 攻击。(但用户体验差)

SQL注入

SQL 注入:攻击者通过在页面输入框中输入特定的字符来执行 SQL 语句,从而获取敏感数据。防范措施包括过滤用户输入、使用参数化查询等。

Web 前端处理用户敏感信息的方法

首先要知道为什么要处理,就是防止敏感信息泄露。泄露方式有 2 种,一是普通用户越权看到,二是被爬虫批量收录。防止普通用户看到比较好办,常做是用 * 代替部分字符。申请查看后记录日志并显示完整字符。防爬虫主要是防源码泄露,这个就复杂了。有用 css 技术错位,有用特殊字符代替等。目的是让爬虫难以识别,但又不能防碍普通用户阅读。
使用加密技术,对敏感信息加密。

cookie session token
关于Cookie

为了解决http无状态链接的问题,出现了cookie机制。
Cookie工作原理介绍如下:
(1)用户从客户端通过浏览器输入用户名和密码,登录网站。
(2)网站的服务端返回登录成功信息的同时,在响应头返回一些键值对,这些键值中包含用户的用户名和密码等相关身份信息,这些信息被保存在浏览器的缓存中,这一步叫做set-Cookie.
(3)当完成登录操作的用户,再次访问网站的其他网页时,每次从客户端浏览器送给服务器的数据请求,请求头中都会带上之前的Cookie键值对,服务器端通过对这Cookie数据的检验判断用户已经登录,并返回已经登录的用户才能访问的数据内容。

Cookie的特点:
1、保存在用户的浏览器中。(如果不设置过期时间则关闭浏览器就删除,存在内存中,如果设置存在磁盘中。浏览器目录下)
2、可以主动清除。
3、可以被伪造。
4、不可以跨站共享Cookie.

关于Session

Session机制的工作原理与Cookie的签名加密机制的原理相似。区别在于,Cookie 机制是将用户的信息存储在客户端浏览器里,而Session机制是将用户的信息存储于服务端的一个散列表里,返回给用户-一个Session_ id, 让用户在登录成功后的每一次数据请求都带上Session jid, 服务端根据Session id来创建和更新Session表中的数据,并返回给用户特定的数据。

session的优势:
服务器端存储: Session 数据存储在服务器端,增加安全性,减少用户信息展示,客户端无法直接篡改,避免用户直接修改或访问数据。
支持复杂数据结构: Session 可以存储复杂的数据结构,如对象和数组,更灵活地维护用户会话状态。Cookie只有键值对。
减少网络传输: 只需要传递SessionID,减少了网络传输的数据量。

session局限性

1、服务器压力增大通常session是存储在内存中的,每个用户通过认证之后都会将session数据保存在服务器的内存中,而当用户量增大时,服务器的压力增大。
2、CSRF跨站伪造请求攻击session是基于cookie进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。
3、扩展性不强如果将来搭建了多个服务器,虽然每个服务器都执行的是同样的业务逻辑,但是session数据是保存在内存中的(不是共享的),用户第一次访问的是服务器1,当用户再次请求时可能访问的是另外一台服务器2,服务器2获取不到session信息,就判定用户没有登陆过。

Token

从各个终端与数据库进行数据交互的身份验证的字符串,就是Token。Token被翻译为“令牌”,顾名思义,起作用是给每一次需要身份验证的从客户端向服务端发送的数据请求一张代表了权限的"令牌"。

JWT的原理

JsonWebToken,简称JWT,
token的验证机制:
token与session的不同主要在
①认证成功后,会对当前用户数据进行加密,生成一个加密字符串token,返还给客户端(服务器端并不进行保存)
②浏览器会将接收到的token值存储在Local Storage中,(通过js代码写入Local Storage,通过js获取,并不会像cookie一样自动携带)
③再次访问时服务器端对token值的处理:服务器对浏览器传来的token值进行解密,解密完成后进行用户数据的查询,如果查询成功,则通过认证,实现状态保持,所以,即时有了多台服务器,服务器也只是做了token的解密和用户数据的查询,它不需要在服务端去保留用户的认证信息或者会话信息,这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,解决了session扩展性的弊端。

JWT的数据结构是很长一段字符串,其有三个部分,依次为Header头部、Payload负载、Signature签名。

Token优势

支持跨域访问: Cookie是不允许垮域访问的,token支持;
避免了大量session对象的存储带来的内存消耗,和各服务器之间session的复制或者专门用于存储session的服务器宕机带来的问题。

参考:
https://blog.csdn.net/weixin_43523043/article/details/126413109
https://zhuanlan.zhihu.com/p/38327058/
https://blog.csdn.net/DisMisPres/article/details/128486386

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

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

相关文章

Opencv | 图像基础知识

目录 一. 图像基础知识1. 颜色空间1.1 RGB颜色空间1.2 HSV颜色空间1.3 CMY(K)颜色空间 (了解) 2. 颜色图2.1 RGB三通道彩色图2.1.1 RGB图片数据格式 2.2 单通道灰度图 一. 图像基础知识 1. 颜色空间 1.1 RGB颜色空间 加法混色&#xff0c;彩色显示器 3通道&#xff1a;Red通道…

Selenium 学习(0.21)——软件测试之单元测试

我又回来了…… 其实我就是个渣&#xff0c;但是我努力、我尽心……所以也还能混得下去。这也是前面说的大厂和小厂之间的差异。 长得长的一定要割掉 其实对于软件测试这块&#xff0c;虽然没有系统学过&#xff0c;但是自己有全程编写过XXX系统&#xff0c;虽然不懂得一些专有…

什么样的网站不适合使用WordPress?

WordPress作为全球应用最广泛的CMS系统&#xff0c;很好很强大&#xff0c;被从多的网站使用。但是&#xff0c;也不是所有的网站。下面简站WP小编从自己多年WordPress建站经验的角度&#xff0c;给大家讲讲&#xff0c;有哪些网站不适合使用WordPress搭建。 1、功能特别多的功…

软考 系统架构设计师系列知识点之系统性能(2)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之系统性能&#xff08;1&#xff09; 所属章节&#xff1a; 第2章. 计算机系统基础知识 第9节. 系统性能 2.9.2 性能计算 性能指标计算的主要方法有定义法、公式法、程序检测法和仪器检测法。 常用的性能指标的经计算…

ASP.NET-Global.asax使用详解

本文介绍了如何使用Global.asax文件来增强ASP.NET Web应用程序的功能。首先&#xff0c;介绍了Global.asax文件的作用和基本功能。接着&#xff0c;详细探讨了在Global.asax中实现定时任务、应用程序级别的错误处理、应用程序启动和结束时执行特定逻辑等功能。随后&#xff0c;…

【Python 48小时速成 9】模块与包

在 Python 中&#xff0c;模块是一个包含了 Python 定义和声明的文件。包是一个包含了多个模块的文件夹&#xff0c;它还包含一个特殊的文件 __init__.py&#xff0c;该文件告诉 Python 解释器该文件夹是一个包。下面我们来分别讲解模块和包&#xff0c;并给出相应的示例代码&a…

QGIS编译(跨平台编译)056:PDAL编译(Windows、Linux、MacOS环境下编译)

点击查看专栏目录 文章目录 1、PDAL介绍2、PDAL下载3、Windows下编译4、linux下编译5、MacOS下编译1、PDAL介绍 PDAL(Point Data Abstraction Library)是一个开源的地理空间数据处理库,它专注于点云数据的获取、处理和分析。PDAL 提供了丰富的工具和库,用于处理激光扫描仪、…

ping 通ip,ping 不通域名

在linux 系统中&#xff0c;ping 通ip,ping 不通对应的域名时&#xff0c;可直接修改系统配置文件 vi /etc/hosts 加入 ip 域名

JavaScript 使用 Promise 实现 sleep 休眠

以下为代码实现&#xff0c;该代码实现了每隔1秒打印一次当前时间&#xff0c;总共打印5次的功能 for(let i 1; i < 5; i){console.log(new Date().toString())await new Promise(resolve>setTimeout(resolve,1000)) }实现休眠的核心代码为: await new Promise(resolv…

uniapp使用Canvas给图片加水印把临时文件上传到服务器

生成的临时路径是没有完整的路径没办法上传到服务器 16:37:40.993 添加水印后的路径, _doc/uniapp_temp_1710923708347/canvas/17109238597881.png 16:37:41.041 添加水印后的完整路径, file://storage/emulated/0/Android/data/com.jingruan.zjd/apps/__UNI__BE4B000/doc/…

Qt笔记 事件处理_鼠标事件

什么是事件&#xff1f; 点击鼠标左键&#xff0c;双击鼠标左键&#xff0c;鼠标来回移动&#xff0c;按下键盘按钮&#xff0c;这些都是事件。 那么事件的响应机制是什么样的呢&#xff1f; 首先main函数中有一个QApplication&#xff0c;其作用是创建一个应用程序对象&…

将后端给的数据转换成el-cascader面板能渲染的数据格式

说明 在业务逻辑中&#xff0c; 往往需要将后端的数据进行格式化 下面代码片是后端给的数据&#xff0c;但在使用el-tree或者是el-cascader时&#xff0c;这种格式数据并不能直接使用&#xff0c;需要进行改造 {"id": 8750,"name": "监控大屏",…

【论文阅读】Masked Autoencoders Are Scalable Vision Learners

Masked Autoencoders Are Scalable Vision Learners 引用&#xff1a; He K, Chen X, Xie S, et al. Masked autoencoders are scalable vision learners[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2022: 16000-16009. 论文链…

UE4_官方动画内容示例1.3_ 运动混合空间(Locomotion BlendSpace)

如何使用运动&#xff08;Locomotion&#xff09;混合空间将Actor在不同方向上及不同速度的运动混合起来。&#xff08;例如&#xff0c;展示了一个混合了以不同速度向后、前、左和右走路/跑步动作的Actor&#xff09;。 一、相关知识点&#xff1a; 混合空间是允许根据多个输…

联想笔记本的声音键没有反应怎么办?

如果我的联想笔记本电脑上的声音按钮没有响应&#xff0c;该怎么办&#xff1f; 如果我的联想笔记本电脑上的声音按钮没有响应&#xff0c;该怎么办&#xff1f; 按下按钮后我无法控制声音。 我该怎么办&#xff1f; 以下是我为您整理的关于联想笔记本声音按键无反应的相关资料…

批量插入集合数据Lists.partition(list, 2000)

批量插入集合数据&#xff08;集合数据量比较大&#xff09;&#xff0c;可以将集合拆分成每次多少条一组&#xff0c;循环插入数据库中。 引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><versio…

[Open3d]: 知识记录

python api 官方手册&#xff1a;http://www.open3d.org/docs/release/ 可视化&#xff1a;http://www.open3d.org/docs/release/tutorial/visualization/visualization.html python-vis 参考代码&#xff1a;https://github.com/isl-org/Open3D/tree/master/examples/python/v…

设计模式的六大基本原则

写代码设计原则是指在编写代码时&#xff0c;遵循一些通用的指导原则&#xff0c;以确保代码的可读性、可维护性、可扩展性和可重用性。这些原则有助于开发人员创建出高质量的软件系统。下面我将介绍几个常见的代码设计原则&#xff0c;并通过C代码例子来说明它们的应用。 1. 单…

Android 10.0 app获取当前已连接wifi列表ssid和密码功能实现

1.前言 在10.0的系统定制化开发中,在一些关于wifi的定制中,有产品需求app中要求获取当前连接wifi和密码功能,在系统原生wifi中 是禁止获取wifi连接的密码的,所以就需要对wifi模块进行一部分的修改,来满足app中获取wifi的ssid和密码功能,接下来就来 实现这个功能 如图:…

金融知识分享系列之:支撑阻力

金融知识分享系列之&#xff1a;支撑阻力 一、支撑阻力原理二、支撑阻力作用1.识别市场资金的预期2.作为入场和平仓的重要参考 三、寻找支撑阻力四、延伸思考五、支撑阻力总结 一、支撑阻力原理 支撑阻力核心要素&#xff1a; 锚定效应订单驱动 支撑阻力原理&#xff1a; 市…