基于 Nginx + Spring Boot + Vue + JPA 的网站安全防护指南

引言

在现代互联网时代,确保网站的安全性非常重要。尤其是基于前后端分离架构,更需要特别注意安全防护。接下来,带你了解几种常见的安全攻击及其应对措施。

常见的安全攻击及应对措施

1. 跨站脚本攻击 (XSS)

攻击描述: 跨站脚本攻击,简称 XSS,就是攻击者在网页中注入恶意脚本,然后在用户访问页面时执行这些脚本。这样一来,攻击者就能偷取数据或劫持用户会话。

具体应对措施:

  • 输入验证和清理: 确保所有用户输入都经过验证和清理。比如,使用 DOMPurify 库清理 HTML 输入。
    import DOMPurify from 'dompurify';
    let cleanInput = DOMPurify.sanitize(userInput);
    
  • 内容安全策略 (CSP): 通过 Nginx 配置 CSP,限制内容的加载来源。
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trustedscripts.example.com";
    
  • 输出编码: 在显示用户输入时,对其进行编码,防止脚本执行。
    @GetMapping("/userInput")
    public String getUserInput(@RequestParam String input) {return HtmlUtils.htmlEscape(input);
    }
    

2. SQL 注入 (SQLi)

攻击描述: SQL 注入攻击是攻击者通过操控输入来执行未授权的 SQL 命令,进而访问或修改数据库中的数据。

具体应对措施:

  • 使用准备语句: 使用参数化查询来防止 SQL 注入。
    @Query("SELECT u FROM User u WHERE u.username = :username AND u.password = :password")
    User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
    
  • 输入验证: 确保所有用户输入都经过验证和清理。
  • 最小权限原则: 确保数据库用户仅具有执行所需操作的最低权限,避免过多权限。

3. 跨站请求伪造 (CSRF)

攻击描述: CSRF 攻击是攻击者通过伪造用户请求来执行未授权操作,利用用户已认证的身份进行恶意操作。

具体应对措施:

  • 使用 CSRF 令牌: 在表单中加入唯一的 CSRF 令牌,并在服务器端进行验证。
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());}
    }
    
  • 验证请求来源: 确保请求来自合法来源。
  • 使用 SameSite Cookie 属性: 设置 Cookie 的 SameSite 属性为 “Strict” 或 “Lax”。

4. 拒绝服务攻击 (DoS/DDoS)

攻击描述: 拒绝服务攻击旨在通过大量请求耗尽服务器资源,使合法用户无法访问服务。

具体应对措施:

  • 速率限制: 使用 Nginx 配置速率限制,控制每个 IP 的请求频率。
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {location / {limit_req zone=one burst=5;proxy_pass http://backend;}
    }
    
  • 负载均衡: 部署负载均衡器来分散流量。
  • 自动化防御工具: 使用如 Fail2Ban 的工具自动检测并阻止恶意 IP。

5. 文件上传漏洞

攻击描述: 文件上传漏洞允许攻击者上传恶意文件并在服务器上执行,从而获取未经授权的访问权限。

具体应对措施:

  • 文件类型验证: 只允许上传特定类型的文件,并对文件类型进行严格验证。
    @PostMapping("/upload")
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {if (!file.getContentType().equals("image/png")) {return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).body("Only PNG files are allowed");}// 保存文件代码
    }
    
  • 存储位置: 将上传的文件存储在非公开目录中,避免直接访问。
  • 文件名清理: 对上传的文件名进行清理,防止路径穿越攻击。
    String filename = Paths.get(file.getOriginalFilename()).getFileName().toString();
    

操作系统安全防护建议

1. 定期更新和补丁管理

具体应对措施:

  • 定期更新操作系统和应用程序,确保安装最新的安全补丁。
  • 使用自动更新功能,确保及时应用安全补丁。

2. 强化系统配置

具体应对措施:

  • 禁用不必要的服务和端口,减少攻击面。
  • 配置防火墙,限制未授权的访问。
    # 使用 firewalld 设置基本防火墙规则
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload
    

3. 系统日志和监控

具体应对措施:

  • 启用并定期检查系统日志,检测可疑活动。
  • 使用监控工具(如 Prometheus 和 Grafana)实时监控系统状态。

数据库安全防护建议

1. 数据库访问控制

具体应对措施:

  • 使用强密码和多因素认证保护数据库访问。
  • 定义并执行严格的访问控制策略,确保只有授权用户才能访问数据库。
    CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strongpassword';
    GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'appuser'@'localhost';
    

2. 数据库加密

具体应对措施:

  • 对敏感数据进行加密存储,确保即使数据被盗也无法读取。
  • 使用传输层加密(如 TLS/SSL)保护数据库连接。

3. 数据库备份和恢复

具体应对措施:

  • 定期备份数据库,确保数据在发生故障或攻击后可恢复。
  • 定期测试备份和恢复过程,确保其有效性。
    # 使用 pg_dump 备份 PostgreSQL 数据库
    pg_dump -U postgres -F c mydatabase > mydatabase_backup.dump
    # 恢复数据库
    pg_restore -U postgres -d mydatabase mydatabase_backup.dump
    

案例分享:Target 数据泄露事件

事件背景: 2013 年,知名零售商 Target 遭遇了严重的数据泄露事件,导致超过 4000 万张信用卡和借记卡信息被盗。

攻击过程:

  • 攻击者通过钓鱼邮件获取了 Target 的第三方供应商的网络凭证。
  • 通过这些凭证,攻击者进入了 Target 的内部网络。
  • 利用内部系统的漏洞,攻击者安装了恶意软件,捕获了销售终端设备的支付信息。

事故影响:

  • Target 赔偿了数亿美元,涉及法律诉讼和罚款。
  • 公司声誉受到严重影响,客户信任度下降。

防护教训:

  • 实施多因素认证,保护重要系统的访问。
  • 定期进行安全审计和漏洞扫描,及时修复漏洞。
  • 加强供应链安全管理,确保第三方供应商的安全性。

结论

通过实施这些安全措施,可以显著提高基于 Nginx、Spring Boot、Vue 和 JPA 构建的前后端分离架构的网站系统的安全性。记住,安全不仅仅是技术上的配置,更是开发和运维中的良好习惯。希望这些建议对你有所帮助。如果有任何问题或需要进一步的帮助,欢迎随时联系我。

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

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

相关文章

【前端】包管理器:npm、Yarn 和 pnpm 的全面比较

前端开发中的包管理器&#xff1a;npm、Yarn 和 pnpm 的全面比较 在现代前端开发中&#xff0c;包管理器是开发者必不可少的工具。它们不仅能帮我们管理项目的依赖&#xff0c;还能极大地提高开发效率。本文将详细介绍三种主流的前端包管理器&#xff1a;npm、Yarn 和 pnpm&am…

六、数据可视化—Echars(爬虫及数据可视化)

六、数据可视化—Echars&#xff08;爬虫及数据可视化&#xff09; Echarts应用 Echarts Echarts官网&#xff0c;很多图表等都是我们可以 https://echarts.apache.org/zh/index.html 是百度自己做的图表&#xff0c;后来用的人越来越多&#xff0c;捐给了orange组织&#xf…

相机光学(三十)——N5-N7-N8中性灰

GTI可提供N5/N7/N8中性灰涂料&#xff0c;用于不同的看色环境&#xff0c;N5/N7/N8代表深中浅不同的灰色程度&#xff0c;在成像、工业、印刷行业中&#xff0c;分别对周围观察环境有一定的要求&#xff0c;也出台了相应的标准文件&#xff0c;客户可以根据实际使用环境进行选择…

FiddlerScript Rules修改-更改发包中的cookie

直接在fiddler script editor中增加如下处理代码即可 推荐文档oSession -- 参数说明 测试笔记 看云

树莓派4B_OpenCv学习笔记19:OpenCV舵机云台物体追踪

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; Python 版本3.7.3&#xff1a; ​​ 今日学习&#xff1…

RAG 工业落地方案框架(Qanything、RAGFlow、FastGPT、智谱RAG)细节比对!CVPR自动驾驶最in挑战赛赛道,全球冠军被算力选手夺走了

RAG 工业落地方案框架&#xff08;Qanything、RAGFlow、FastGPT、智谱RAG&#xff09;细节比对&#xff01;CVPR自动驾驶最in挑战赛赛道&#xff0c;全球冠军被算力选手夺走了。 本文详细比较了四种 RAG 工业落地方案 ——Qanything、RAGFlow、FastGPT 和智谱 RAG&#xff0c;重…

不仅是输出信息,console.log 也能玩出花

console.log 是 JavaScript 中一个常用的函数&#xff0c;用于向控制台输出信息。 console.log 虽然主要用于调试目的&#xff0c;但也包含了一些有趣的用法&#xff0c; console.log 不仅能输出文本&#xff0c;还能以更丰富的方式展示信息。 比如我们打开 B 站&#xff0c;然…

79. UE5 RPG 创建技能冷却和消耗

在这一篇里面&#xff0c;我们接着优化技能&#xff0c;现在角色添加的主动技能能够同步到ui上面。我们在这一篇文章里面&#xff0c;完善技能的消耗&#xff08;释放技能减少蓝量&#xff09;和冷却机制。 我们可以看到&#xff0c;在技能类默认值这里&#xff0c;可以设置它的…

【YashanDB知识库】YashanDB 开机自启

【问题分类】 YashanDB 开机自启 【关键字】 开机自启&#xff0c;依赖包 【问题描述】 数据库所在服务器重启后只拉起monit、yasom、yasom进程&#xff0c;缺少yasdb进程&#xff1a; 【问题原因分析】 数据库安装的时候未启动守护进程 【解决 / 规避方法】 进入数据库之前…

问题清除指南|Dell OptiPlex 7070 升级 win11 开启 TPM 2.0 教程

前言&#xff1a;最近想把实验室台式机的系统从 Windows 10 升级到 Windows 11&#xff0c;遇到一点小问题&#xff0c;在此记录一下解决办法。 ⚠️ 注&#xff1a;本教程仅在 Dell OptiPlex 7070 台式机系统中测试有效&#xff0c;并不保证其余型号机器适用此教程。 参考链接…

计算机网络体系结构解析

OSI参考模型 与 TCP/IP模型 如图所示 TCP/IP模型有几层 应用层&#xff1a;只需要专注于为用户提供应用功能 HTTP、SMTP、Telnet等&#xff0c;工作在操作系统中的用户态&#xff0c;传输层及以下工作在内核态传输层&#xff1a;为应用层提供网络支持&#xff08;TCP、UDP传…

谷粒商城实战-25-分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集

文章目录 一&#xff0c;拆分配置集二&#xff0c;配置文件中配置多配置集1&#xff0c;引用多配置集2&#xff0c;验证 三&#xff0c;多配置集总结1&#xff0c;使用场景2&#xff0c;优先级 这一节介绍如何加载多个配置集。 大多数情况下&#xff0c;我们把配置全部放在一个…

Linux系统学习 —— 计算机基础(笔记篇)

一、电脑硬件 电脑硬件由输入&#xff0c;控制计算&#xff0c;输出三部分组成。 输入部分包括键鼠&#xff0c;读卡器&#xff08;外部接口&#xff09;&#xff0c;扫描仪&#xff08;打印机的扫描仪&#xff09;。计算控制部分包括CPU &#xff0c; 内存&#xff0c;硬盘&…

【Git基本操作】添加文件 | 修改文件 | 及其各场景下.git目录树的变化

目录 1. 添加文件&add操作和commit操作 2. .git树状目录的变化 3. git其他操作 4. 修改文件 4.1 git status 4.2 git diff 1. 添加文件&add操作和commit操作 add操作&#xff1a;将工作区中所有文件的修改内容 添加进版本库的暂存区中。commit操作&#xff1a;…

『Django』自带的后台

theme: smartblue 本文简介 点赞 关注 收藏 学会了 上一篇讲了 Django 操作 MySQL 的方法&#xff0c;讲了如何创建模型&#xff0c;如何对数据库做增删改查的操作。但每次修改数据都要写代码&#xff0c;多少有点麻烦。 有没有简单一点的方法呢&#xff1f; 有的有的&#…

鸿蒙语言基础类库:【@ohos.util.Vector (线性容器Vector)】

线性容器Vector 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Vect…

C语言 结构体和共用体——结构体所占内存的字节数

目录 结构体所占内存的字节数 结构体所占内存的字节数

极验语序点选验证码识别(一)

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 极验文字点选验证码不必多说,很多小伙伴,借助标注工具或者打码平台标注完数据集后,使用开源的目标检测网络即可完成,欢迎收看我之前的文章: Pytorch利用ddddocr辅助识别点选验证码 或者使…

d3dcompiler_43.dll文件是什么?如何快速有效的解决d3dcompiler_43.dll文件丢失问题

dcompiler_43.dll 是一个Windows系统中的系统文件&#xff0c;属于DirectX软件的一部分。这个dcompiler_43.dll&#xff08;动态链接库&#xff09;文件主要用于处理与3D图形编程有关的任务&#xff0c;是运行许多游戏和高级图形程序必需的组件之一。那么如果电脑丢失d3dcompil…

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

使用 Unity OpenXR 实现Gaze眼部追踪 在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。 Unity …