Java开发安全及防护

news2025/1/12 4:58:59

目录

一、开发安全

二、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类以及配置文件。

        步骤二:产看XssFilter:init、doFilter

        步骤三:请求内容处理,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("&", "&")
                          .replaceAll("\"", """)
                          .replaceAll("'", "'")
                          .replaceAll("<", "&lt;")
                          .replaceAll(">", "&gt;");
    return encoded;
}

        二、框架+过滤器

        @WebFilter、@ServletComponentScan

        三、自定义过滤器

        注册

        四、前端限制(不讲解)见:前端安全系列:如何防止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.coloradmin.cn/o/2131244.html

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

相关文章

JavaScript控制语句和函数的使用

文章目录 前言一、控制语句 1.if条件语句2.switch多分支语句3.for循环语句4.while循环语句5.do...while循环语句6.break 与 continue 关键字二、函数 1.函数的定义2.函数的调用总结 前言 JavaScript 的控制语句和函数的使用&#xff0c;基本上同理于 Java。该篇文章主要展示如何…

力扣之1783.大满贯数量

文章目录 1. 1783.大满贯数量1.1 题干1.2 建表1.3 题解1.4 结果截图 1. 1783.大满贯数量 1.1 题干 表&#xff1a;Players ----------------------- | Column Name | Type | ----------------------- | player_id | int | | player_name | varchar | ----------------------…

深度学习实战89-基于改造后的长短期记忆网络LSTM 的猪肉价格预测模型研究

大家好,我是微学AI,今天给大家介绍一下深度学习实战89-基于改造后的长短期记忆网络LSTM 的猪肉价格预测模型研究。本文围绕基于改造后的长短期记忆网络 LSTM 的猪肉价格预测模型展开研究。首先介绍项目背景,阐述进行猪肉价格预测的重要性。接着详细讲解改造后的 LSTM 模型原…

LibSVM介绍及使用

介绍 LibSVM 是一个广泛使用的开源库&#xff0c;用于支持向量机&#xff08;SVM&#xff09;的实现。它由台湾大学的 Chih-Chung Chang 和 Chih-Jen Lin 开发。LibSVM 提供了一种简单易用的接口&#xff0c;支持多种 SVM 变体&#xff0c;包括分类、回归和分布估计。以下是一些…

【数据库】MySQL-基础篇-事务

专栏文章索引&#xff1a;数据库 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、事务简介 二、事务操作 1.未控制事务 1.1 测试正常情况 1.2 测试异常情况 2.控制事务一 1.1 查看/设置事务提交方式 1.2 提交事务 1.3 回滚事务 3.控制事务二 1.1 开启事…

C++ namespace(域)

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 namespace的价值 避免命名冲突&#xff1a;在大型项目或使用多个库的情况下&#xff0c;不同部分可能会定义相同名称的实体&#xff08;如变量、函数、类等&a…

fpga系列 HDL:简化的FIFO实现

CODE 下面是一个简化的FIFO实现示例&#xff0c;基于Verilog HDL&#xff1a; module fifo (input wire clk, // 时钟信号input wire reset, // 异步复位信号input wire wr_en, // 写使能信号input wire rd_en, // 读使能…

CSS中的位置定位总结

文章目录 静态定位相对定位绝对定位固定定位 静态定位 静态定位(position:static)/默认的文档流布局 块级元素按照书写顺序从上往下依次排列行内/行内块元素按照书写顺序从左到右依次排列&#xff0c;一行放不下才换行文档流中的元素都是紧密排布的&#xff0c;没有大的空隙&…

【机器学习】9 ——最大熵模型的直观理解

系列文章目录 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前奏例子硬币垃圾邮件代码 前奏 【机器学习】6 ——最大熵模型 例子 硬币 假设我们有一枚硬币&#xff0c;可能是公平的&#xff0c;…

哪些软件可以监控电脑屏幕?四款优秀的屏幕电脑监控软件

你是否曾好奇&#xff0c;员工们在电脑前的忙碌究竟是在提高公司业绩&#xff0c;还是在成为“网上冲浪”高手&#xff1f; 或者&#xff0c;作为家长&#xff0c;你是否想知道孩子们的学习状态是如火如荼&#xff0c;还是在和游戏“斗智斗勇”&#xff1f;不管是办公还是家庭…

图纸加密软件哪个最好用?2024年好用的6款图纸加密软件分享!好用不踩雷!

某知名设计公司的年度发布会上&#xff0c;管理层突然被一个坏消息打断——公司的一份核心图纸被泄露到互联网上&#xff0c;导致重要的合作项目搁浅&#xff0c;直接损失数百万。 这样的事件不是个例&#xff0c;为此&#xff0c;很多企业意识打破图纸加密对保护企业知识产权和…

机械设计基础知识---材料硬度

一、定义 硬度&#xff0c;物理学专业术语&#xff0c;材料局部抵抗硬物压入其表面的能力称为硬度。固体对外界物体入侵的局部抵抗能力&#xff0c;是比较各种材料软硬的指标。由于规定了不同的测试方法&#xff0c;所以有不同的硬度标准。各种硬度标准的力学含义不同&#xf…

业务资源管理模式语言13

解决方案&#xff1a; 创建一个与“Resource”类相关的“Resource Delivery”类来控制资源交付的确认过程。因为交货是与交易相关的&#xff0c;“Resource”类与“Resource Delivery”类是“1 to 1”关系。如果你采用了子模式“Resource Measurement”或者采用了“ItemizeThe…

动手学深度学习(pytorch土堆)-04torchvision中数据集的使用

CIFAR10 CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成&#xff0c;每个类有 6000 张图像。有 50000 张训练图像和 10000 张测试图像。 数据集分为 5 个训练批次和 1 个测试批次&#xff0c;每个批次有 10000 张图像。测试批次包含每个类中随机选择的 1000 张图像…

Unity 给模型贴上照片

Unity将真实世界的照片贴图到模型上 原因 模拟仿真&#xff0c;直接使用照片肯定是效果最好的&#xff0c;省下做材质了 直接拖动即可 导入图片到Unity中将图片修改为Sprite模式直接将图片拖动到Scene面板的物体上即可 注意&#xff1a;是将图片拖动到Scene面板的物体上&a…

【Ubuntu】安装常用软件包

安装java 直接输入java&#xff0c;如果没有安装的话会提醒你输入命令安装&#xff0c;类似 Command java not found, but can be installed with: sudo apt install jdkxxxxxxxxxxxxxx然后选一个版本安装就好&#xff0c;我这里选的jdk17,安装完确认一下 ubuntuVM-4-13-ubu…

【深度学习】注意力机制介绍,了解什么是注意力计算规则以及常见的计算规则,知道注意力机制的工作流程

1注意力机制介绍 1.1 注意力概念 我们观察事物时&#xff0c;之所以能够快速判断一种事物(当然允许判断是错误的), 是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断&#xff0c;而并非是从头到尾的观察一遍事物后&#xff0c;才能有判断结果. 正是基于…

动物检测系统源码分享

动物检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

el-tree父子不互相关联时,手动实现全选、反选、子级全选、清空功能

el-tree父子不互相关联时&#xff0c;手动实现全选、反选、子级全选、清空功能 1、功能实现图示 2、实现思路 当属性check-strictly为true时&#xff0c;父子节点不互相关联&#xff0c;如果需要全部选中或选择某一节点下的全部节点就必须手动选择每个节点&#xff0c;十分麻…

速卖通在哪些国家受欢迎?速卖通怎么选品?选品方式有哪些?

速卖通&#xff08;AliExpress&#xff09;是阿里巴巴集团旗下的一家跨境电商平台&#xff0c;也是全球第三大英文在线购物网站&#xff0c;为全球消费者提供了一个方便、多样化的购物平台&#xff0c;在中国跨境出口B2C平台中占据领先地位。相关数据统计&#xff0c;今年上半年…