Java开发安全及防护

目录

一、开发安全

二、XSS介绍及防范措施

2.1何为XSS

2.2XSS分类

2.3常用方法

三、SQL注入介绍及防范措施

3.1何为SQL注入

3.2常用方法

四、重放介绍及防范措施

4.1何为重放

4.2常用方法


一、开发安全

        在学习安全之前,我们首先学习漏洞,知道漏洞我们才可以更进一步地维护我们的开发安全。注入就是把输入的数据变成可以执行的代码。

二、XSS介绍及防范措施

2.1何为XSS

        开发安全 - XSS 详解 | Java 全栈知识体系 (pdai.tech)

        就是说其实我们的浏览器十分的愚蠢,它看见js脚本就想执行。(回显)好比我们在文本框或者其他什么给后端发送内容的地方写了这些,而不对其进行过滤,就十分的危险。那么如何防范?过滤。

        一个靶场:xss靶场练习(一)之xss.haozi.me_xss(haozimi)靶场地址-CSDN博客

        ruoyi的过滤:

        步骤一:查看FilterConfig类以及配置文件。(过滤器注入、配置类@Value)

        步骤二:产看XssFilter:init、doFilter(实现Filter接口)

        步骤三:请求内容处理,XssHttpServletRequestWrapper进行重包装,进入HTMLFilter

        @Xss注解对属性进行检查

2.2XSS分类

        反射型XSS:点击链接

        存储型XSS:评论区攻击

        DOM型XSS:属于前段的漏洞

        上边俩个是后端的

        这篇文章有意思:前端安全系列:如何防止XSS攻击?_location.href xss-CSDN博客,讲的XSS很生动。

2.3常用方法

        一、使用HTML实体编码

        是否高枕无忧?不。

public String encodeHtmlEntities(String input) {String encoded = input.replaceAll("&", "&amp;").replaceAll("\"", "&quot;").replaceAll("'", "&#x27;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");return encoded;
}

        二、自定义过滤器

        注册

        三、前端限制见:前端安全系列:如何防止XSS攻击?_location.href xss-CSDN博客

        除此之外,其实我们对用户上传的文件也应该进行过滤。

三、SQL注入介绍及防范措施

3.1何为SQL注入

        当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

3.2常用方法

        一、预编译语句PreparedStatement

        二、输入验证和过滤(正则、关键词过滤)

        三、使用ORM框架(之前讲的MyBatis)

四、重放介绍及防范措施

4.1何为重放

        重放攻击原理:

  1. 数据截获:攻击者首先截获网络上的数据传输,这可能包括登录凭据、令牌、或其他敏感信息。(抓包)
  2. 数据复制:攻击者将截获的数据复制并保留下来。
  3. 数据重放:攻击者在未来的某个时间点,将这些复制的数据重新发送到原始服务器或另一个服务器,尝试模仿原始的合法用户。

        与之相近的概念还有SSRF和CSRF,都是伪造攻击。

4.2常用方法

        通性:

  1. 生成唯一标识符:每次接收到请求时,服务器需要生成一个唯一的标识符(如 nonce、timestamp、签名等),并将这个标识符与请求相关联。
  2. 存储已使用的标识符:为了能够识别出重复的请求,服务器需要将已经使用过的标识符存储在一个可靠的存储系统中,如数据库、缓存或内存。
  3. 验证标识符:当服务器接收到新的请求时,需要检查这个请求是否包含一个新的、未被使用过的标识符。如果标识符已经存在于存储系统中了,说明这个请求是重复的,服务器应该拒绝这个请求。

        一、时间戳

        前端在每次的请求中发送一个请求时间的时间戳,而我们实际后端处理的时候再次获取当前时刻的时间戳,两者比对,超过一定限度则拒绝请求。例如:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class ServerExample {public static void main(String[] args) {SpringApplication.run(ServerExample.class, args);}@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password, @RequestParam long timestamp) {long serverTimestamp = System.currentTimeMillis();// 检查时间戳差异,设置为300000毫秒(5分钟)if (Math.abs(serverTimestamp - timestamp) > 300000) {return "请求无效或已过期";}// 处理登录逻辑,这里简单返回成功return "登录成功";}
}

        二、随机数或者随机字符串(Nonce)

        一般我们有随机数或者随机字符串(Nonce)完成上述步骤。对Nonce要设置一个定期清理的时间,避免过多存储空间。

  1. 客户端生成一个随机的 Nonce,加入到请求头或请求体中。
  2. 服务器检查该 Nonce 是否已经被使用过。
  3. 如果 Nonce 是第一次出现,则接受请求;如果已经使用过,则拒绝请求。

        三、序列号

  1. 客户端请求业务接口之前先请求分配序列号接口来获得唯一的序列号。
  2. 客户端请求业务接口时,将序列号添加到请求头或者请求体中。
  3. 服务器在接收到请求时验证序列号是否已经处理过,未处理过则接受请求并在处理完成后作废此序列号,否则拒绝该请求。

使用此种方式需要注意以下几点:

  • 需要使用加密或签名以防止序列号被篡改

        我们看看ruoyi的实现。

        步骤一:查看RepeatSubmit注解

        步骤二:查看RepeatSubmitInterceptor

        步骤三:查看SameUrlDataInterceptor

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

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

相关文章

视频格式转为mp4(使用ffmpeg)

1、首先安装ffmpeg&#xff0c;下载链接如下 https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-6.1.1-full_build.7z 安装后确保ffmpeg程序加到PATH路径里&#xff0c;cmd执行ffmpeg -version出现下图内容表示安装成功。 2、粘贴下面的脚本到文本文件中&#xff0c;文件后缀…

【Python笔记】PyCharm大模型项目环境配置

一、PyCharm创建新项目 二、更新pip版本 ...>python.exe -m pip install --upgrade pip 三、生成所需requirements配置文件 ...>pip freeze > requirements.txt 四、安装所需组件requirements.txt ...>pip install -r requirements.txt

基于代理的分布式身份管理方案

目的是使用分布式的联合计算分发去替换掉区块链中原有的类第三方可信中心的证书机制&#xff0c;更加去中心化。 GS-TBK Group Signatures with Time-bound Keys. CS-TBK 算法 Complete subtree With Time-bound Keys&#xff0c;该算法是用来辅助检测用户的签名是否有效&…

微服务_入门2

文章目录 一、Feign 一、Feign 来看我们以前利用RestTemplate发起远程调用的代码&#xff1a; 存在下面的问题&#xff1a; 代码可读性差&#xff0c;编程体验不统一参数复杂URL难以维护&#xff08;有时候访问一个页面所携带的参数是非常多的&#xff09; Feign是一个声明…

CSS——网格布局(display: grid)之上篇

CSS——网格布局&#xff08;display: grid&#xff09; 前面介绍了弹性布局&#xff0c;今天我们介绍一下网格布局。 什么是网格布局 CSS网格布局&#xff08;CSS Grid Layout&#xff09;是一种用于创建复杂网页布局的系统&#xff0c;它允许开发者以二维系统&#xff08;…

双三次插值及MATLAB实现

一、双三次插值的概念 双三次插值&#xff08;Bicubic interpolation&#xff09;&#xff0c;又叫双立方插值。在数值分析这个数学分支中&#xff0c;双三次插值是二维空间中最常用的插值方法。在这种方法中&#xff0c;函数f在点 (x0 ,y0) 的值不仅考虑其直接邻接点对其的影响…

Leetcode—1137. 第 N 个泰波那契数【简单】

2024每日刷题&#xff08;160&#xff09; Leetcode—1137. 第 N 个泰波那契数 记忆化搜索实现代码 class Solution { public:int tribonacci(int n) {int zero 0;int one 1;int two 1;if(n 0) {return zero;}if(n 1) {return one;}if(n 2) {return two;}int ans 0;fo…

MATLAB、FPGA、STM32中调用FFT计算频率、幅值及相位差

系列文章目录 文章目录 系列文章目录前言MATLABSTM32调用DSPSTM32中实现FFT关于初相位 FPGA 前言 最近在学习如何在STM32中调用FFT MATLAB 首先对FFT进行一下说明&#xff0c;我们输入N个点的数据到FFT中&#xff0c;FFT会返回N个点的数据&#xff0c;这些数据都是复数&#…

【ACM出版】第三届人工智能与智能信息处理国际学术会议(AIIIP 2024,10月25-27)

第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国-天津 | 2024年10月25-27日 | 会议官网&#xff1a;www.aiiip.net 官方信息 会议…

智能客服自动化新体验:Function Calling让问题处理更高效

Function Calling作为一项创新功能&#xff0c;正深刻改变着大模型与实际产业之间的融合方式。它不仅**为大模型增添了与外部工具和API无缝连接的能力&#xff0c;助力大模型向实际产业落地迈进&#xff1b;还极大地简化了开发者与模型间的交互流程&#xff0c;使得开发者从模型…

Leetcode—1184. 公交站间的距离【简单】

2024每日刷题&#xff08;161&#xff09; Leetcode—1184. 公交站间的距离 实现代码 class Solution { public:int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {int clockwise 0;int counterclockwise 0;if(start > desti…

RabbitMQ(高阶使用)死信队列

文章内容是学习过程中的知识总结&#xff0c;如有纰漏&#xff0c;欢迎指正 文章目录 一、什么是死信队列&#xff1f; 二、死信队列使用场景 三、死信队列如何使用 四、打车超时处理 1.打车超时实现 以下是本篇文章正文内容 一、什么是死信队列&#xff1f; 先从概念解释上搞…

linux入门到实操-4 linux系统网络配置、连接测试、网络连接模式、修改静态IP、配置主机名

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff08;包含课程同版本linux系统文件等内容&#xff09;&#xff0c;供大家学习交流下载&#xff1a;…

【C++算法】前缀和

前缀和 题目链接 前缀和https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId230&tqId2021480&ru/exam/oj&qru/ta/dynamic-programming/question-ranking&sourceUrl%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%2…

CefSharp_Vue交互(Element UI)_WinFormWeb应用---设置应用透明度(含示例代码)

一、界面预览 1.1 设置透明(整个页面透明80%示例) 限制输入值:10-100(数字太小会不好看见) 1.2 vue标题栏 //注册类与js调用 (async function(

【Linux基础】冯诺依曼体系结构操作系统的理解

目录 前言一&#xff0c;冯诺依曼体系1. 为什么有内存结构?2. 对硬件中数据流动的再理解 二&#xff0c;操作系统(Operator System)1. 概念2. 操作系统结构的层状划分3. 操作系统对硬件管理的理解4. 用户与操作系统的关系的理解5. 系统调用和库函数的关系6. 为什么要有操作系统…

eclipse使用 笔记02

创建一个项目&#xff1a; 【File-->New-->Dynamic Web Project】 进入页面&#xff1a; Project name为项目命名 Target runtime&#xff1a;选择自己所对应的版本 finish创建成功&#xff1a; 创建成功后的删除操作&#xff1a; 创建前端界面&#xff1a; 【注意&a…

RT-DETR改进策略:BackBone改进|Swin Transformer,最强主干改进RT-DETR

摘要 在深度学习与计算机视觉领域,Swin Transformer作为一种强大的视觉Transformer架构,以其卓越的特征提取能力和自注意力机制,正逐步引领着图像识别与检测技术的革新。近期,我们成功地将Swin Transformer引入并深度整合至RT-DERT(一种高效的实时目标检测与识别框架)中…

数据结构(7.3_2)——平衡二叉树

平衡二叉树&#xff0c;简称平衡树(AVL树)----树上任一结点的左子树和右子树的高度之差不超过1. 结点的平衡因子左子树高-右子树高 //平衡二叉树结点 typedef struct AVLNode {int key;//数据域int blalance;//平衡因子struct AVLNode* lchild, * rchild; }AVLNode,*AVLTree; …

【开放词汇检测】基于MMDetection的MM-Grounding-DINO实战

文章目录 摘要安装基础环境新建虚拟环境安装pytorch安装openmim、mmengine、mmcv安装 MMDetection验证安装配置OV-DINO环境 MMDetection的MM-Grounding-DINO详细介绍测试结果Zero-Shot COCO 结果与模型Zero-Shot LVIS ResultsZero-Shot ODinW&#xff08;野生环境下的目标检测&…