瑞_Java开发手册_(四)安全规约

🙊前言:本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!

本系列第一篇链接:(一)编程规约
本系列第二篇链接:(二)异常日志
本系列第三篇链接:(三)单元测试
本系列第四篇链接:(四)安全规约
本系列第五篇链接:(五)MySQL数据库
本系列第六篇链接:(六)工程结构
本系列第七篇链接:(七)设计规约

在这里插入图片描述

安全规约的意义

  安全规约主要是为了保障代码的安全性,从而减少系统被攻击的风险。安全规约包括但不限于防止SQL注入、XSS攻击、CSRF攻击、文件上传漏洞、文件包含漏洞等方面的安全问题。制定这些规则的目的并不是为了约束和禁锢开发者的创造力,而是为了帮助大家能够在正确的道路上,尽可能的避免踩坑和跑偏。规则可能会对代码实现造成影响,但是制定规则的主要目标是为了让大多数程序员小伙伴可以得到更多的好处。如果在团队实际运作中认为某个规则无法遵循或有更好的做法,希望大家可以共同改进该规范。

  安全规约的意义在于:

  • 防止安全漏洞:安全规约提供了一系列的安全实践和建议,帮助开发者避免常见的安全漏洞,如SQL注入、跨站脚本攻击(XSS)等。
  • 提高代码质量:遵循安全规约可以促使开发者编写更加健壮、可靠的代码。通过避免不安全的代码实践,可以提高代码的整体质量,减少潜在的错误和问题。
  • 增强安全性意识:安全规约强调了安全在软件开发中的重要性,促使开发者更加关注安全性问题。通过学习和遵守安全规约,可以提高开发者的安全意识,使安全性成为整个开发团队共同关注的问题。
  • 统一安全标准:安全规约可以作为统一的安全标准,确保所有开发人员遵循相同的最佳实践和准则。这有助于在整个项目中保持一致的安全水平,并减少安全相关的风险。
  • 减少维护成本:遵循安全规约可以降低软件维护成本。安全的代码更易于维护、调试和使用,减少了对安全问题的修复和加固的成本。
  • 合规性:对于一些特定行业或应用场景,可能需要遵循特定的安全标准和法规。遵循安全规约可以帮助开发者确保其代码符合这些标准和法规要求,避免因不合规导致的法律风险和责任。

安全规约

  1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。
    说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。

瑞:水平权限校验是指对用户个人页面或功能的访问权限进行校验,以确保只有经过授权的用户才能访问或修改特定的数据。这种校验通常用于防止未授权的用户随意访问、修改或删除他人的数据,以保护数据的隐私和安全性

  1. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
    说明:中国大陆个人手机号码显示为:137****0969,隐藏中间 4 位,防止隐私泄露。

瑞:手机号脱敏代码如下(正则表达式参考):

    public static String maskPhoneNumber(String input) {// 匹配手机号的正则表达式String phonePattern = "(\\d{3})\\d{4}(\\d{4})";// 数据脱敏,将匹配到的手机号中间四位替换为星号return input.replaceAll(phonePattern, "$1****$2");}
  1. 【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。
    反例:某系统签名大量被恶意修改,即是因为对于危险字符 # --没有进行转义,导致数据库更新时,where后边的信息被注释掉,对全库进行更新。

瑞:❗️本条为神坑 ❗️ 有小可爱在使用 JDBC 编写SQL时为了方便调试❌选择用如String.format的方式拼接SQL语句❌,拼接出的SQL语句如下所示,假设现在用户使用Ray ' -- (注意要空格,SQL注入)为需要修改的用户名,直接导致where语句之后的信息全部被注释,导致了全表更新❗️ ❗️ ❗️
  UPDATE `user` SET nick_name = 'Ray '-- ’ WHERE is_deleted = 0 and id = 1
  如果是使用MyBatis等框架,请使用:#{},#param# 。不要使用${} 此种方式容易出现 SQL 注入。

  1. 【强制】用户请求传入的任何参数必须做有效性验证。
    说明:忽略参数校验可能导致:
    • page size 过大导致内存溢出
    • 恶意 order by 导致数据库慢查询
    • 缓存击穿
    • SSRF
    • 任意重定向
    • SQL 注入,Shell 注入,反序列化注入
    • 正则输入源串拒绝服务 ReDoS

      Java 代码用正则来验证客户端的输入,有些正则写法验证普通用户输入没有问题,但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。

瑞:本条建议配合测试使用

  1. 【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。

瑞:为了防止跨站脚本攻击(XSS)

  1. 【强制】表单、AJAX 提交必须执行 CSRF 安全验证。
    说明:CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户不知情的情况下对数据库中用户参数进行相应修改。

  2. 【强制】URL 外部重定向传入的目标地址必须执行白名单过滤。

瑞:如果服务端未对传入的跳转url变量进行检查和控制,恶意攻击者可以构造一个恶意地址,诱导用户跳转到恶意网站。由于跳转是从用户信任的站点进行的,用户很可能会不加怀疑地信任该跳转,从而受到钓鱼攻击或其他网络欺诈。所以,为了开发人员的清白,懂的都懂💦

  1. 【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放的机制,如数量限制、疲劳度控制、验证码校验,避免被滥刷而导致资损。
    说明:如注册时发送验证码到手机,如果没有限制次数和频率,那么可以利用此功能骚扰到其它用户,并造成短信平台资源浪费。

瑞:尤其是登录密码校验,如果不设置限制和频率,那么密码就容易被暴力破解

  1. 【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略。

瑞:博主认为本条不应该是推荐,而是【强制】,同第7条,懂的都懂




本文是博主的粗浅理解,可能存在一些错误或不完善之处,如有遗漏或错误欢迎各位补充,谢谢

  如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~


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

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

相关文章

springBoot 添加自定义类库包

一、新建SpringBoot Web 二、添加类库包 com.saas.pdf 删除掉多余的类,新建类:PdfUtil.java package com.saas.pdf;public class PdfUtil {public static void Save(String filePath) {System.out.println("保存成功!");} }三、…

1.5计算机网络的分类

1.5计算机网络的分类 1.5.1按照网络的作用范围进行分类 1、广域网WAN 广域网WAN(WideAreaNetwork):广域网的作用范围通常为几十到几千公里,因而有时也称为远程网(longhaulnetwork)。广域网是互联网的核心部分,其任务…

electron+vue项目使用serialport报错Cannot read property ‘indexOf‘ of undefined解决办法

描述 使用ElectronVue项目时引入serialport串口后启动时报下面错误 Cannot read property indexOf of undefined解决方法 打开vue.config.js找到pluginOptions -> electronBuilder -> externals添加serialport module.exports {pluginOptions: {electronBuilder: {e…

eBPF运行时安全

引言 eBPF作为当前linux系统上最为炙手可热的技术,通常被用于网络流量过滤和分析、系统调用跟踪、性能优化、安全监控,当下比较知名的项目有Cilium、Falco等。 Cilium 是一个开源的容器网络和安全性项目,致力于提供高效的容器通信和强大的安…

Java异常处理--异常处理知识点总结及企业真题

文章目录 一、知识点总结(1)异常处理概述(2)异常处理的方式1:try-catch-finally(3)异常处理的方式2:throws(4)throw手动抛出异常对象(5&#xff0…

2024美赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模…

IOS-UIAlertController简单使用-Swift

UIAlertControlle时IOS的对话框控制器(警报控制器),简单使用方法如下: 步骤都一样,先是创建UIAlertController,然后创建UIAlertAction,再将UIAlertAction添加到UIAlertController中,…

如何安装配置VisualSVN服务并实现公网访问本地服务【内网穿透】

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

【嘉立创EDA-PCB设计指南】3.网络表概念解读+板框绘制

前言:本文对网络表概念解读板框绘制(确定PCB板子轮廓) 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2,将设计的原理图转为了PCB,在PCB界面下出现了所有的封装,以及所有的飞线属性&…

每日一题 2171. 拿出最少数目的魔法豆(中等)

只有两种拿法,要么全拿光,剩下的要取到和最少魔法豆的袋子的数目相等,显然关键在于每个袋子的最少豆子数量是多少(少于这个数量的袋子是全拿出的)想到了从小到大排序先把最少豆子的袋子认为是基线(最少数量…

计算机毕业设计 基于Java的国产动漫网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

React与Vue性能对比:两大前端框架的性能

React和Vue是当前最流行的前端框架之一,它们在性能方面具有一些差异。 React的虚拟DOM机制使得它在渲染大型应用时表现出色。它通过将页面抽象为虚拟DOM树,并且只更新改变了的部分,从而减少了实际DOM的操作次数。这种优化可以提高应用的性能&…

C语言——atoi函数解析

目录 前言 atoi函数的介绍 atoi函数的使用 atoi函数的模拟实现 前言 对于atoi函数大家可能会有些陌生&#xff0c;不过当你选择并阅读到这里时&#xff0c;请往下阅读&#xff0c;我相信你能对atoi函数熟悉该函数的头文件为<stdlib.h> 或 <cstdlib> atoi函数的…

区间预测 | Matlab实现GRU-Adaboost-ABKDE的集成门控循环单元自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现GRU-Adaboost-ABKDE的集成门控循环单元自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现GRU-Adaboost-ABKDE的集成门控循环单元自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实…

从零开始学习Zeppelin:大数据可视化分析的交互式开发系统!

介绍&#xff1a;Apache Zeppelin是一个基于Web的交互式开发系统&#xff0c;主要用于进行大数据可视化分析。其核心概念是notebook&#xff0c;所有的操作都可以在notebook中完成。Zeppelin提供了一套非常全面的数据分析解决方案&#xff0c;支持数据采集、数据发现、数据分析…

ES自动补全

安装IK分词器 要实现根据字母做补全&#xff0c;就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址&#xff1a;GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characte…

Verilog刷题笔记15

题目&#xff1a; An adder-subtractor can be built from an adder by optionally negating one of the inputs, which is equivalent to inverting the input then adding 1. The net result is a circuit that can do two operations: (a b 0) and (a ~b 1). See Wikipe…

openssl3.2 - 官方demo学习 - test - certs

文章目录 openssl3.2 - 官方demo学习 - test - certs概述笔记.sh的执行语句打印的方法要修改的实际函数END openssl3.2 - 官方demo学习 - test - certs 概述 官方demos目录有证书操作的例子 已经做了笔记 openssl3.2 - 官方demo学习 - certs 但是这个demos/certs目录的脚本,…

PXE——高效批量网络装机

目录 部署PXE远程安装服务 1.PXE概述 2.实现过程 3.实验操作 3.1安装dhcp、vsftpd、tftp-server.x86_64、syslinux服务 3.2修改配置文件——DHCP 3.3修改配置文件——TFTP 3.4kickstart——无人值守安装 3.4.1选择程序 3.4.2修改基础配置 3.4.3修改安装方法 3.4.4…

《TrollStore巨魔商店》TrollStore2安装使用教程支持IOS14.0-16.6.1

TrollStore(巨魔商店) 简单的说就相当于一个永久的免费证书&#xff0c;它可以给你的iPhone和iPad安装任何你想要安装的App软件&#xff0c;而且不需要越狱,不用担心证书签名过期的问题&#xff0c;不需要个人签名和企业签名。 支持的版本&#xff1a; TrollStore安装和使用教…