Java安全编码规范之Web安全漏洞

news2025/2/25 3:04:44

Java安全编码规范之Web安全漏洞

  • 安全现状
  • 漏洞案例
    • 事件一
    • 事件二
    • 事件三
  • 安全编码规范之常见的安全漏洞
      • 敏感数据编码
        • 概述
        • 漏洞危害
        • 常见关键字举例
        • 解决方案
        • 代码硬编码秘钥错误示例
      • 日志打印导致的敏感信息泄露
        • 漏洞概述
        • 关键字举例
        • 解决方案
        • 代码中在日志打印token 错误示例
      • 文件上传
        • 漏洞概述
        • 漏洞危害
        • 文件上传需要进行的检测
      • 文件读取
        • 漏洞概述
        • 漏洞危害
        • 文件读取漏洞流程
        • 解决方案
      • 跨站脚本攻击 -XSS
        • 漏洞概述
        • 漏洞危害
        • 问题场景
        • 解决方案
        • 错误代码示例
      • 安全随机数
        • 概述
        • 安全随机数生成
        • 非安全随机数
      • 私有/不安全加密算法
        • 概述
        • 常见不安全加密算法
        • 使用不安全加密算法危害
      • SQL注入
        • 概述
        • 漏洞危害
        • 判断SQL注入方式
        • 示例
          • 错误示例
          • 正确示例
      • 异常处理不当导致的敏感信息泄露
        • 漏洞概述
        • 漏洞危害
        • 常见可抛出敏感信息的异常类
        • 解决方案
      • 日志注入漏洞
        • 概述
        • 漏洞危害
        • 漏洞判断方式
        • 漏洞解决方案
      • 命令注入
        • 漏洞概述
        • 漏洞危害
        • 可调用系统命令的类和函数举例
        • 判断命令注入的方式
        • 解决方案
      • 反序列化漏洞
        • 概述
        • 漏洞成因以及危害
        • 常见可进行反序列化函数举例
        • 解决方案
      • 服务端请求伪造-SSRF
        • 概述
        • 漏洞危害
        • 常见可发起网络请求的类
        • 漏洞判断思路
        • 错误代码示例
      • URL重定向
        • 概述
        • 漏洞危害
        • 可重定向函数举例
        • 漏洞判断方式
        • 解决方案

安全现状

当公司访问量增大,自然而然就会遇到网络攻击了,同时也会需要考虑如何规范代码编写来规避这些漏洞攻击。
如果你在开发中还没有遇到过,或者说还没有思考过这些问题,可以通过这篇文章多了解下 现在的攻击是多么的厉害。同时我们在编码的时候就可以多注意一些了。

现在互联网应用如此之多,最常见的漏洞就是web安全漏洞了,白帽子(白帽子一般指白客。
白客就是指从事正当行业的黑客)更善于挖掘web漏洞,黑客也更倾向于从web中寻找漏洞作为突破
口去侵入大型的网络系统。所以 web系统也成为了各大企业首要关注和重点防护的对象。
下面简单介绍下 几个实际存在因为代码不规范导致出现的漏洞的例子。并列举下多种漏洞以及如何在我们的日常编码中避免产生这样的漏洞。

漏洞案例

现列举常见的漏洞案例:

事件一

2022年8月,某用户在某论坛上发布一则消息,称出售700个中国zhenfu和企业办公系统的RDP权限,其中包括众多软件公司的权限。还可以植入木马病毒进行勒索。

事件二

2021年某月,外部发现某公司某系统存在任意文件上传漏洞。且该上传接口存在未授权访问。攻击者可以在未登录的情况下将木马病毒上传到系统并访问,从而获得服务器权限。

事件三

2022年某月。某公司中勒索病毒,客户系统被黑客加密。经溯源发现,该公司中勒索病毒的根本原因是系统中存在文件上传漏洞,对上传的文件没有进行充分的校验。导致接口可以上传木马文件,最终服务器被攻入。

安全编码规范之常见的安全漏洞

常见的安全漏洞有:
敏感信息编码,XML注入,SQL注入,跨站脚本攻击,恶意文件上传,任意文件读取,日志注入,命令注入,反序列化漏洞,服务端请求伪造,URL重定向。

敏感数据编码

概述

硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中。

漏洞危害

造成数据难以修改,被客户质疑留后门,软件包被反编译造成关键信息泄露等.

常见关键字举例

比如 password,pass,adress,session,ID,sessionID,userName,license,decrtpt,secret,token,phone

解决方案

将数据存储在配置文件中,并进行加密存储。

代码硬编码秘钥错误示例

在这里插入图片描述

日志打印导致的敏感信息泄露

漏洞概述

这个就比较好理解。我们常见的print,log,logger 等日志中打印敏感信息。将会产生敏感信息泄露的风险

关键字举例

userName,password,idCard,privateKey,secreKey,token,phone,email,ip 等包含有敏感字段的信息。

解决方案

不打印敏感信息或者将敏感信息进行脱敏(将敏感信息替换)

代码中在日志打印token 错误示例

在这里插入图片描述

文件上传

漏洞概述

系统提供下文件上传功能,但没有对上传的文件进行充分校验,就会存在文件上传漏洞。
漏洞

漏洞危害

攻击者上传可执行文件控制服务器,恶意消耗系统资源。

文件上传需要进行的检测

检验文件类型,校验文件大小,对文件重命名,校验文件行数页数列数(上传表格),对文件上传频率进行限制,校验二进制头(图片),在解压过程中对已解压文件大小,已解压文件个数,文件名进行校验,同时上传过程中产生了缓存文件过后需要删除缓存。

文件读取

漏洞概述

系统提供文件下载或读取功能时,如果下载的文件路径,文件名可以被外界控制,且服务端下载文件的路径没有进行合法性校验,则系统存在任意文件下载漏洞的风险。

漏洞危害

造成任意文件读取,任意文件下载。

文件读取漏洞流程

在这里插入图片描述

解决方案

不提供目录遍历服务,文件放在web无法直接访问的目录下。下载文件之前做权限判断,对参数进行校验通过白名单的方式验证用户输入,同时验证路径是否在规定的路径之下。

跨站脚本攻击 -XSS

漏洞概述

浏览器将外部输入解析为前端代码进行之下.XSS分为存储性,反射性与DOM型,其中存储型XSS危害最大

漏洞危害

回话劫持,钓鱼攻击,网址挂马,浏览器被控制,信息被窃取等。

问题场景

xss漏洞通常会出现在页面中需要进行个性化展示的地方,如富文本,邮件标题邮件内容,URL链接,评论区等等,因此在开发这类功能的时候需要格外做好安全防范。比如 输入框 输入 这样的样式内容,保存后点击这个输入框,可能会出现一个弹出框。

解决方案

要对用户输入的数据进行类型,大小,范围的验证,充分过滤特殊字符,对输出进行编码转义等等。其中验证必须在客户端和服务端同时验证,客户端的验证可以减轻对服务端请求的次数和用户操作的方便性。服务端验证确保数据的正确性,同时也防止用户伪造请求绕过客户端的验证。

错误代码示例

可以看出代码中没有进行任何安全编码操作,容易造成XSS。
在这里插入图片描述

安全随机数

概述

在安全应用场景,随机数应该使用安全的随机数。密码学意义上的安全随机数,要求必须要保证其不可预测性。

安全随机数生成

        byte[]values=new byte[128];
        SecureRandom random=new SecureRandom();
        random.nextBytes(values);
        int tempNumber=random.nextInt();

非安全随机数

        Random random=new Random();
        rsandom.nextInt();

私有/不安全加密算法

概述

私有或非标准的加密算法,因其安全性未得到充分的验证,并且未得到业界的认可,使用可能会带来十分严重的风险,这些密码算法包括但不限于:

  1. 未经过专业机构评估的,自行设计的密码算法
    2)自行对标准密码算法进行改造的
    3)自行定义的通过变形/字符移位/替换等方式执行的数据转换算法
    4)用编码的方式(如Base64编码)实现数据加密目的的伪加密实现
    5)用差错控制编码(如奇偶校验,CRC)实现完整性校验.

常见不安全加密算法

DES,3DES,SKIPJACK,2TDEA,TEA,RC2,RC4,Blowfish,RSA(<2048 bits),SHA0,MD2,MD5,RIPEMD,
RIPEMD-128,ECIES(<224bits)等

使用不安全加密算法危害

主要是安全强度难以保证,容易被攻破。

SQL注入

概述

通过把SQL语句插入Web表单参数或页面请求的字符串中,最终达到欺骗数据库服务器执行恶意的SQL语句。达到恶意攻击的目的。

漏洞危害

造成信息泄露,严重的则造成脱库,获取Web管理员账号和密码,权限提升,控制服务器等。

判断SQL注入方式

在这里插入图片描述

示例

错误示例

在这里插入图片描述

正确示例

在这里插入图片描述

异常处理不当导致的敏感信息泄露

漏洞概述

当系统抛出异常,然后把异常的信息返回到前台或者打印到日志中,就有可能产生信息泄露。

漏洞危害

系统信息漏洞,当这些信息配合上一些特定的漏洞的时候,就产生更大的危害。

常见可抛出敏感信息的异常类

FileNotFoundException:泄露文件系统结构和文件名列举。
JarException:泄露文件系统结构
MissingResourceException:资源列举
NotOwnerException:所有人列举
OutOfMemoryError:dos攻击
StackOverflowError:dos攻击
SQLException:数据库结构,用户名列举

解决方案

打印或抛出自定义的异常信息.

日志注入漏洞

概述

也叫CRLF注入,当日志打印外部输入的数据却没过滤(\r,\n)时,就会造成日志注入

漏洞危害

造成日志污染,日志伪造

漏洞判断方式

在这里插入图片描述

漏洞解决方案

过滤特殊字符(主要是回车与换行符),常见过滤的字符
%0a,%0b,%0d,%08,%7f,\r,\n.

命令注入

漏洞概述

系统中存在调用系统命令的功能,当系统命令或者命令中的某些参数外部可控,并且系统没有对参数进行校验的时候,就会产生任意命令执行。

漏洞危害

造成任意命令执行,服务器被控制

可调用系统命令的类和函数举例

process,processBuilder,getRuntime(),exec()等。当在使用这些危险的函数的时候,应当注意做好安全访问。

判断命令注入的方式

所执行命令或者命令中的部分参数是否为外部可控,在外部可控的情况下是否进行安全校验

解决方案

将命令硬编码
使用白名单控制外部可执行命令

反序列化漏洞

概述

序列化 是将对象转换为字节序列的过程,反序列化 是将字节序列转为为对象的过程。当反序列化的数据由外部控制且不经过安全验证时,就会产生反序列化漏洞

漏洞成因以及危害

当被反序列化的数据是经过特殊构造的,如一个重写了readObject()方法并在该方法中进行命令调用的对象序列化后生成的数据,该数据被反序列化时,重写后的方法就会被调用,从而导致任意代码执行,最终服务器被控制。

常见可进行反序列化函数举例

ObjectInputStream.readObject,
ObjectInputStream.readUnshared
XmlDecode.readObject
Yaml.load
XStream.fromXML
ObjectMapper.readValue
JSON.parseObject等
当在使用这些反序列化函数反序列化外部数据时,应该做好充分的安全校验。

解决方案

对于不可信数据,在执行反序列化函数之前对输入数据进行安全处理,如使用白名单检查反序列化对象是否都是安全的类名,是否使用到了危险的库(如apache Commons Collections),检查反序列化的对象中是否存在代码执行;以及升级存在漏洞的第三方插件。

服务端请求伪造-SSRF

概述

一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统,攻击者向服务端发送包含恶意URL链接的请求,借由服务端去访问此URL,以获取受保护的网络资源。

漏洞危害

获取内网服务器信息,主机任意文件读取,服务端口探测等。

常见可发起网络请求的类

Httpclient
HttpUrlConnection
URLConnection
RestTemplate
HttpTemplate
Okhttp
Url
使用这些类去发起网络请求时,应当做好安全防范。

漏洞判断思路

**加粗样式**

错误代码示例

在这里插入图片描述

URL重定向

概述

跳转漏洞,指的是程序接受用户可控的输入作为到外部站点的链接,然后在重定向中使用该链接。

漏洞危害

被重定向到钓鱼网址

可重定向函数举例

redirect
sendRedirect

漏洞判断方式

检查重定向的URL或者URL中的参数是否为用户可控,如果用户可控且没有做充分校验,则存在问题。

解决方案

使用白名单限制跳转的URL

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

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

相关文章

CSDN客诉周报第12期|修复10个重大bug,解决29个次要bug,采纳1个用户建议

听用户心声&#xff0c;解用户之需。hello&#xff0c;大家好&#xff0c;这里是《CSDN客诉周报》第12期&#xff0c;接下来就请大家一同回顾我们最近几周解决的bug&#xff5e; 一、重大问题 1、【博客】主页无法访问 反馈量&#xff1a;80 发生时间&#xff1a;10月30日下…

外汇天眼:Axi收回在RGT Capital的全部控制权,Eurotrader获得FCA牌照

在过去的一周里&#xff0c;国外外汇市场上有哪些值得关注的新闻&#xff0c;跟着天眼君一起了解下吧~具体新闻如下&#xff1a; 1、Axi收回在RGT Capital的全部控制权 据天眼君了解&#xff0c;总部位于澳大利亚的零售外汇和差价合约经纪商Axi在澳大利亚投资公司RGT Capital的…

AutoDL使用手册

官网&#xff1a;AutoDL-品质GPU租用平台-租GPU就上AutoDL 1.服务器购买 2.新建虚拟环境 conda create -n tf python3.8 # 构建一个虚拟环境&#xff0c;名为&#xff1a;tf conda init bash && source /root/.bashrc # 更新bashrc中的环境变量 conda acti…

【Flink】使用水位线实现热门商品排行以及Flink如何处理迟到元素

文章目录一 WaterMark1 水位线特点总结2 实时热门商品【重点】&#xff08;1&#xff09;数据集&#xff08;2&#xff09;实现思路a 分流 - 开窗 - 聚合分流&#xff1a;开窗&#xff1a;聚合&#xff1a;b 再分流 -- 统计再分流&#xff1a;统计&#xff1a;&#xff08;3&am…

【Hack The Box】Linux练习-- Seventeen

HTB 学习笔记 【Hack The Box】Linux练习-- Seventeen &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年9月7日&#x1f334; &#x1f…

SpringBoot结合Liquibase实现数据库变更管理

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 SpringBoot集成MybatisPlus项目实操 SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理&#xff1a;Li…

[附源码]Python计算机毕业设计Django的党务管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

行为型模式-命令模式

package per.mjn.pattern.command;import java.util.HashMap; import java.util.Map;// 订单类 public class Order {// 餐桌号码private int diningTable;// 点的餐品和份数private Map<String, Integer> foodDir new HashMap<>();public int getDiningTable() {…

[附源码]计算机毕业设计springboot高校车辆管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

家居建材企业竞争白热化,如何通过供应商协同系统转型升级,提高核心竞争力

伴随房地产高景气时代逐渐退去&#xff0c;新房销售红利期或已接近尾声&#xff0c;家居建材需求正迈入平稳发展新阶段&#xff0c;企业之间竞争更加白热化。在面对数字化时代的快速发展&#xff0c;很多家居建材企业已达成这样的共识&#xff1a;数字化是企业未来发展的必由之…

人工智能岗位可以考什么证书?考试难不难?

最近几年人工智能在市场上的热度越来越大&#xff0c;很多企业都会利用这个项目来发展自己新渠道&#xff0c;那么想进入这一行的人需要怎么提升自己的技能呢&#xff1f;那就是考取人工智能相关的证书&#xff0c;目前阿里云人工智能是国内市场最热门的认证分为两个等级&#…

(2)点云库PCL学习——剔除点云值

1、主要参考 (1) 点云离群点剔除 — open3d python_Coding的叶子的博客-CSDN博客_离群点去除 (2) open3d之点云异常值去除&#xff08;笔记5&#xff09;_Satellite_H的博客-CSDN博客 2、剔除的方法 2.1无效值剔除 详见我的上一篇blob &#xff08;1&#xff09;点云库…

C语言—指针进阶(详解篇)

目录 1.字符指针 1.1字符指针定义 1.2 字符指针用法 2.指针数组 2.1 指针数组定义及使用 3.数组指针 3.1 数组指针定义 3.2 &数组名和数组名 3.3 数组指针的基本用法 4. 数组参数、指针参数 5. 函数指针 5.1 函数指针定义既基本使用 5.2 有趣的代码 6. 函…

BMS 信息资源e分享平台

今天分享的是一款关于医学的企业内部实战系统。当时某药企内部面临现状是医学人力资源有限、信息量需求大、信息资源传递途径受限&#xff0c;覆盖范围小。为解决目前面临的问题&#xff0c;提高信息资源的统一性、准确性和安全性&#xff0c;优化资源获取流程&#xff0c;提高…

[vite.js]按需加载自动注册组件

最近(后知后觉)发现各大ui组件库的按需引入&#xff0c;在使用vite构建项目的时候&#xff0c;都推荐使用unplugin-vue-components插件自动解析ui组件来自动注册&#xff1b;就是说不需要再import { ... } from ..了&#xff0c;该插件会自动帮助解析并注册成组件。其实之前用n…

数字文档管理不能落后的 5 个原因

数字文档管理不能落后的 5 个原因 信息管理对于几乎每个行业的组织都至关重要。从财富 500 强企业到医疗机构&#xff0c;您处理文件的地点和方式都很重要。如果您坚持基于纸张的流程&#xff0c;那么您可能会落后于其他企业而且冒着很大的风险。 在许多组织中&#xff0c;数字…

Linux的Jdk安装教程

liunx下Jdk安装教程 1.创建jdk的安装目录&#xff08;/usr/local/src&#xff09; 确保安装的目录是空的&#xff0c;如果不是空的&#xff0c;删除一下&#xff0c;或者放在自己其他的目录也可以 mkdir -p /usr/local/src/jdk这里可能会出现之前安装过jdk&#xff0c;可以用下…

用HTML+CSS做一个漂亮简单的轻量级图片相册博客网站(web前端期末大作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

web表单(详解)

目录 1. 表单的概述 1.1 表单组成 2. 表单标记 2.1 input标记 2.2 select标记 2.3 textarea标记 3.HTML5新增标记 3.1 datalist标记 3.2 date 输入类型 3.3 color输入类型 3.4 button标记 3.5 details标记和summary标记 3.6 progress标记 3.7 meter标记 4 综合…

【pen200-lab】10.11.1.5

pen200-lab 学习笔记 【pen200-lab】10.11.1.5 &#x1f525;系列专栏&#xff1a;pen200-lab &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月29日&#x1f334; &#x1f36d;作者…