针对 % 号 | 引起的 不安全情况

 把网站开放的课程都检索下来了

 

一、情况1

org.apache.tomcat.util.http.Parameters processParameters 信息: Character decoding failed. Parameter [Mac] with value [%%%] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values. Note: further occurrences of Parameter errors will be logged at DEBUG level.

二、解释

Tomcat 在处理请求参数时遇到了字符解码失败的情况。具体来说,它发现了一个名为 "Mac" 的参数,其值为 "%%%",但是由于解码失败,它将该参数忽略了。

这种情况通常发生在客户端发送的请求参数值包含了不正确的编码字符时。在 HTTP 请求中,参数值应该是经过 URL 编码的,以确保传输过程中不会出现问题。URL 编码会将一些特殊字符转换成 % 加上对应的 ASCII 值的十六进制表示,以确保它们能够被安全地传输和解析。

在这个错误信息中,参数值为 "%%%",这可能是因为客户端在发送请求时出现了错误,导致了参数值被错误地编码了多次。

解决这个问题的方法是确保客户端发送的请求是正确的,参数值经过了正确的编码。你可能需要检查发送请求的代码,确保参数值在发送之前被正确地 URL 编码了。另外,还可以查看客户端发送请求时是否存在其他的错误或异常情况。

三、情况2

在 SQL 查询中,百分号(%)通常用作通配符,用于模糊匹配。当你在查询语句中使用 % 时,它会匹配任意数量(包括零个)的字符。这在查询时可以非常有用,特别是在需要进行模糊搜索或匹配的情况下。

例如,在使用 LIKE 关键字进行模糊搜索时,你可以使用 % 来匹配任意字符。例如:

SELECT * FROM users WHERE username LIKE 'joh%';

四、解释

恶意用户可能会利用这种通配符来执行 SQL 注入攻击,因此在构建 SQL 查询时,确保对用户输入进行正确的处理和过滤是非常重要的。

五、解决办法

当涉及到从前端向后端传递数据时,需要确保对用户输入进行适当的过滤和验证,以防止潜在的安全风险,比如 SQL 注入、跨站脚本攻击(XSS)等。以下是前端 JavaScript 和后端过滤器的一些方法:

5.1 前端

前端 JavaScript 过滤和验证:

1.输入验证:在前端,使用 JavaScript 对用户输入进行验证。可以使用正则表达式或者内置的验证函数,确保输入符合预期的格式和要求。

function validateInput(input) {// 使用正则表达式验证输入const regex = /^[a-zA-Z0-9_]+$/; // 例如,只允许字母、数字和下划线return regex.test(input);
}

2.编码用户输入:在向后端发送数据之前,对用户输入进行编码,以确保特殊字符不会被解释为代码或指令。

const userInput = document.getElementById('userInput').value;
const encodedInput = encodeURIComponent(userInput);

5.2 后端

后端过滤器/验证器:

  1. 输入过滤:在后端,使用过滤器或验证器来处理接收到的用户输入数据。这可以是基于框架的过滤器、自定义的验证函数等。
    public boolean isValidInput(String input) {// 实现输入验证逻辑,例如检查输入是否符合预期格式// 如果不符合,返回 false;否则返回 true
    }

六、其他办法

在 Spring Boot 和 MyBatis 框架中,可以使用拦截器(Interceptor)或者过滤器(Filter)来过滤请求参数。同时,确实,在数据库查询时使用分页可以有效地减少一次性加载大量数据的风险。

分页查询:

在使用 MyBatis 进行数据库查询时,可以使用其提供的分页插件来实现分页功能,比如 MyBatis 分页助手(MyBatis PageHelper)。

1.引入 PageHelper 依赖:在 Maven 或 Gradle 中引入 MyBatis 分页插件的依赖。

2.配置分页插件:在 MyBatis 的配置文件(通常是 application.ymlapplication.properties)中配置分页插件。

mybatis:

        plugin:

                pagehelper:

                        helperDialect: mysql

                        reasonable: true

                        supportMethodsArguments: true

 

 

3.在查询方法中使用分页:在需要分页查询的方法中,调用 PageHelper 的静态方法来设置分页参数。

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getUsers(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize);return userMapper.getUsers();}
}

过滤请求参数:

使用拦截器(Interceptor):
  1. 创建拦截器类:创建一个拦截器类,实现 HandlerInterceptor 接口,重写 preHandle 方法,在该方法中对请求参数进行过滤或验证。
  2. 注册拦截器:在 Spring Boot 应用程序中注册拦截器,以便它能够拦截到相应的请求。
使用过滤器(Filter):
  1. 创建过滤器类:创建一个过滤器类,实现 javax.servlet.Filter 接口,重写 doFilter 方法,在该方法中对请求参数进行过滤或验证。
  2. 配置过滤器:在 Spring Boot 应用程序中,可以通过 @Component 或者 @Configuration 注解来声明并配置过滤器。

 

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

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

相关文章

数组元素翻倍C++

编写一个 C 程序&#xff0c;实现一个功能&#xff0c;即将数组中的每个元素值翻倍。程序应定义一个函数 doubleArray&#xff0c;该函数接收一个整数数组的指针和数组的大小&#xff0c;然后将数组中的每个元素都翻倍。 代码 #include <iostream>void doubleArray(int…

红帽为 Red Hat OpenShift AI 扩大与 Elasticsearch 向量数据库的合作

作者&#xff1a;来自 Elastic Aditya Tripathi 红帽和 Elastic 今天宣布开展合作&#xff0c;以便在 Red Hat OpenShift AI 上集成 Elasticsearch 向量数据库。 Red Hat OpenShift 用户现在可以通过红帽生态系统目录实施 Elasticsearch 以进行向量搜索和检索增强生成 (RAG) 应…

商机来了你能抓住吗?2024新商机!2024创业新风口!2024创业项目小成本!2024创业干什么最赚钱?

19世纪末&#xff0c;美国加利福尼亚州发现了黄金&#xff0c;出现了淘金热。有一位17岁的少年来到加州&#xff0c;是想加入淘金者的队伍&#xff0c;可看到金子没那么好淘&#xff0c;淘金的人很野蛮&#xff0c;他很害怕。这时&#xff0c;他看到淘金人在炎热的天气下干活口…

C++笔试强训day16

目录 1.字符串替换 2.神奇数 3.DNA序列 1.字符串替换 链接 简单的遍历替换即可&#xff1a; class Solution { public:string formatString(string str, vector<char>& arg) {string ret;int k 0;for (int i 0; i < str.size(); i){if (str[i] %){ret arg…

Windows10搭建GPU版Darknet—yolov4—VS2022+CUDA+CUDNN(亲测有效)

1 VS2019安装 网址&#xff1a;Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 下载完成之后双击.exe文件 步骤严格如下安装 默认语音包为中文&#xff08;简体&#xff09; 安装位置可以自行选择&#xff0c;完成以后就可以点击安装了。 安装完毕以后需要重启…

464. 我能赢吗

464. 我能赢吗 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;_464我能赢吗_记忆化dp 错误经验吸取 原题链接&#xff1a; 464. 我能赢吗 https://leetcode.cn/problems/can-i-win/description/ 完成情况&#xff1a; 解题思路&#x…

【Go】Go Swagger 生成和转 openapi 3.0.3

本文档主要描述在 gin 框架下用 gin-swagger 生成 swagger.json 的内容&#xff0c;中间猜的坑。以及&#xff0c;如何把 swagger 2.0 转成 openapi 3.0.3 下面操作均在项目根目录下执行 生成 swagger 2.0 import swagger go get -u github.com/swaggo/gin-swagger go get …

炫酷个人主页(源码免费)

炫酷个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <!--哪怕是深爱之人 对我们的痛苦一无所知&#xff01;* ░░░░░░░░░░░░░░░░░░░░░░░░▄░░* ░░░░░░░░░▐█░░░░░░░░░░░▄▀▒▌░* ░…

Jenkins android 自动打包安卓 centos8.5 运维系列五

1 新建项目android #cat android.sh #!/bin/bash rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/debug/* rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/release/* cd /data/.jenkins/workspace/android/app source /etc/profile g…

一文读懂:架构图类型、设计方法(内附大量案例)

架构图是一种用于描述和展示软件系统或应用程序的结构和组成的图形表示。它通常包括系统的各个组件、模块、接口、数据流等元素&#xff0c;并显示它们之间的关系和交互。 一、架构图的类型 架构图有多种类型&#xff0c;常见的几种类型包括&#xff1a; 高层架构图&#xff0…

政安晨【零基础玩转各类开源AI项目】:基于Ubuntu系统本地部署使用GPT-SoVITS进行语音克隆与TTS语音生成

目录 介绍 什么是TTS 安装Miniconda 框架功能 测试通过的环境 开始 1. 安装好miniconda 2. 进入下载的GPT-SoVITS目录 3. 创建虚拟环境并执行脚本 4. 执行过程中可能会出错 5. 下载预训练模型 6. 训练过程中可能会报错 7. 使用过程中可能出错 8.以下是使用全过程…

JavaEE技术之MySql主从复制及mycat[了解,不讲]

文章目录 1. 主从复制1.1. 主从同步的原理1.2. 检查数据库远程访问权限1.3. 主从配置1.3.1. master配置1.3.2. slave配置1.3.3. 主库创建同步用户1.3.4. 从库配置主从关系1.3.5. 重置主从关系 1.4. 测试主从复制 2. Mycat2.1. Mycat简介2.2. MyCat读写分离原理2.3. 不废话&…

代码随想录day63 | 单调栈P3 | ● 84.

84.柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&a…

docker部署minio和业务服务因变更minio密码导致访问不到图片的问题

问题起因 业务application和minio都是docker部署。按部署规则minio的环境变量中设置了MINIO_ROOT_USER和MINIO_ROOT_PASSWORD。这样就可以用这套用户名密码登录minio了。而我的application中是通过api访问minio获取资源URL&#xff0c;提供给前端的。所以在application的环境变…

苹果电脑MAC清理系统空间工具CleanMyMacX4.15.3中文版下载

苹果电脑以其出色的性能、优雅的设计和高效的操作系统而受到许多用户的喜爱。然而&#xff0c;随着时间的推移和使用量的增加&#xff0c;你可能会发现你的Mac开始变得缓慢和响应迟缓。这通常是因为硬盘空间被大量占用&#xff0c;影响了系统的整体性能。幸运的是&#xff0c;有…

qt: undefined reference to `vtable for aaa‘

版本qt4.8.6&#xff0c;编译报错“main.cpp:(.text0x3b): undefined reference to vtable for aaa” 就一个main.cpp #include <QApplication> #include <QTimer> #include <QCursor> #include <QMouseEvent> #include <QDesktopWidget> #inc…

【VMware】vSphere 8.0 安装和设置简介

本信息的目标读者为熟悉虚拟机技术和数据中心操作并具有丰富经验的 Windows 或 Linux 系统管理员。 vSphere 8.0 提供了各种安装和设置选项&#xff0c;这些选项定义了相应的任务序列。 vSphere 的两个核心组件是 ESXi 和 vCenter Server。ESXi 是可用于创建和运行虚拟机和虚拟…

租用便宜的香港云服务器?可以关注这几点

租用便宜的香港云服务器&#xff0c;要关注服务商、配置以及提供的服务水平协议&#xff08;SLA&#xff09;。一般来说&#xff0c;基础型的香港云服务器月付价格可以从几十到几百元不等。但请注意&#xff0c;非常低廉的价格可能会牺牲服务器的性能、可靠性以及技术支持。 对…

判断字符是否唯一——力扣

面试题 01.01. 判定字符是否唯一 已解答 简单 相关标签 相关企业 提示 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: false 示例 2&#xff1a; 输入: s "abc" 输出: true…

在k8s中部署Prometheus并实现对k8s集群的监控

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Prometheus&#xff1a;监控的神》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、k8s简介 2、 Prometheus概述 二、准备k8s环境 1、…