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

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

 

一、情况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 {

    @Autowired
    private 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 注解来声明并配置过滤器。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

陪诊陪护小程序基于ThinkPHP + FastAdmin + 微信小程序开发(源码搭建/上线/运营/售后/更新

支持多运营区&#xff0c;陪护师、推广者等完整闭环功能&#xff0c;快速搭建陪护业务平台。 消息通知&#xff1a;系统可以向用户发送订单状态变更、陪诊员信息更新等通知&#xff0c;确保用户及时了解相关信息&#xff0c;提高用户体验。 订单管理&#xff1a;患者可以查看自…

C++运算符重载(操作符重载)

运算符重载 1. 运算符重载基础1.1 运算符重载语法1.2 运算符重载细节补充1.3 更多的运算符重载 2. 重载单目运算符3. 如何直接输入输出对象类型——重载运算符 << 和 >>3.1 单个对象实现 cou <<3.2 多个对象实现 cout<<3.3 右移运算符 输入 cin >&g…

python输出希腊字母

有时候在绘制一些函数图像时&#xff0c;需要坐标轴和图例显示希腊字母 plt.xlabel(r’ ϵ \epsilon ϵ’)

土壤多参数检测仪在农业生产有哪些优势?

在现代农业的快速发展中&#xff0c;土壤多参数检测仪凭借其独特的功能和优势&#xff0c;为农业生产注入了新的活力。以下是其在农业生产中的几个显著优势&#xff1a; 一、全面精准的检测能力 土壤多参数检测仪能够全面、精准地检测土壤中的多种参数&#xff0c;如pH值、电…

【机器学习】线性回归:以房价预测为例

线性回归&#xff1a;揭秘房价预测的黑科技 一、引言二、线性回归概述三、房价预测实例数据收集与预处理特征选择与建模模型评估与优化 四、总结与展望 一、引言 在数字化时代&#xff0c;数据科学已成为推动社会进步的重要引擎。其中&#xff0c;线性回归作为数据科学中的基础…

Android 面试之Kotlin 协程上下文和异常处理

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 上下文是什么 CoroutineContext是一组用于定义协程行为的元素&#xff0c;包括以下几部分&#xff1a; Job&#xff1a;控制协程的生命周期Co…

一文讲透亚马逊云三层架构

关于三层架构&#xff0c;我们有很多想说的话&#xff1a; &#xff08;以下内容以下都在VPC中&#xff09; cloudfront做CDN加速网关规划S3做静态网站托管APIGateway作为统一网关入口认证/限流Lambda 作为传统后端&#xff0c;并发&#xff0c;底层架构Redis缓存DDB作为持久化…

Excel 根据分类及组内序号进行编码

例题描述和简单分析 Excel 记录课程数据&#xff0c;未排序&#xff0c;部分如下&#xff1a; ABC1CourseDateTime2Word1-Sep-209:003Word1-Sep-209:004PowerPoint1-Sep-209:005Word1-Sep-2012:006PowerPoint1-Sep-2012:007Excel1-Sep-2012:008Word1-Sep-2012:00 现在要新增…

发布一个属于自己的 npm工具包

我们可以发布一个属于自己的工具包到 npm 服务上&#xff0c;方便自己和其他开发者使用&#xff0c;参与社区贡献&#xff0c;操作步骤如下&#xff1a; 创建与发布 npm 初始化工具包&#xff0c;package.json 填写包的信息 (包的名字是唯一的)注册账号 https://www.npmjs.co…

13.跳跃游戏

文章目录 题目简介题目解答解法一&#xff1a;贪心算法&#xff0b;动态规划代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 跳跃游戏面试题 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 思路&#xff1a;这…

Django开发实战之定制管理后台界面及知识梳理(中)

上一篇文章末尾讲到如何能够展示更多的字段在界面上&#xff0c;那么针对整个界面数据&#xff0c;如果我想按照某一个条件进行筛选&#xff0c;我该怎么做呢&#xff0c;只需要加上下面一行代码 注意&#xff1a;中途只有代码片段&#xff0c;文末有今天涉及的所有代码 1、增…

RabbitMQ高级(MQ的问题,消息可靠性,死信交换机,惰性队列,MQ集群)【详解】

目录 一、MQ的问题 1. 问题说明 2. 准备代码环境 1 创建project 2 创建生产者模块 3 创建消费者模块 二、消息可靠性 1. 介绍 2. 生产者确认机制 3. MQ消息持久化 4. 消费者确认机制 5. 消费者auto模式的失败重试 6. 小结 三、死信交换机和延迟消息 1. 介绍 2. …

【前端部署】Ubuntu22.04 使用nginx部署vue前端项目教程

一.ubuntu安装nginx 1.更新本地软件包列表 sudo apt update2.安装nginx sudo apt install nginx3.验证nginx是否安装成功 sudo systemctl status nginx如果Nginx正在运行&#xff0c;则命令输出应该显示Active&#xff08;active (running)&#xff09;状态。 4.若nginx未运…

【MySQL】——课程平台的创建设计

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

2024HW Linux应急响应基础学习

首先展示关于Linux的关键目录&#xff0c;这是应急响应查看的关键&#xff1a; 常用命令 top //查看进程资源的占用情况 ps -aux //查看进程 直接写ps aux也可以 netstat -antpl //查看网络连接 ls -alh /proc/pid //查看某个pid对应的可执行程序 pid记得修改 lsof /…

微信登录功能--网站应用

微信开发平台注册https://open.weixin.qq.com/ 账号中心-填写基本资料&#xff08;最好是公司注册&#xff09; 账号中心-开发者资质认证&#xff08;充钱&#xff0c;300&#xff09; 审核通过之后&#xff0c;管理中心-网站应用-创建网站应用&#xff08;AppSecret一定一定…

SMART700西门子触摸屏维修6AV6 648-0CC11-3AX0

西门子工控机触摸屏维修系列型号&#xff1a;PС477,PC677,TD200,TD400,KTP178,TP170A,TP170B,TP177A,TP177B,TP270,TP277,TP27,MP370,MP277,OP27,OP177B等。 触摸屏故障有&#xff1a;上电黑屏, 花屏,暗屏,触摸失灵,按键损坏,电源板,高压板故障,液晶,主板坏等,内容错乱、进不了…

nacos server安装部署傻瓜级教程

下载地址&#xff1a;GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.an easy-to-use dynamic service discovery, configuration and service management platfo…

C++ 搜索二叉树

目录 1.二叉搜索树概念 2. 实现二叉搜索树 2.1. 二叉搜索树的插入 2.2查找 2.3删除节点 3.二叉树的应用&#xff08;KV结构&#xff09; 1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为…

AutoCAD中密集的填充打散后消失的问题

有时候在AutoCAD中&#xff0c;图案填充的填充面积过大或填充太过密集时&#xff0c;将该填充打散&#xff0c;也就是执行Explode时&#xff0c;会发现填充图案消失了。 原因是打散后线条太大&#xff0c;系统就不显示了。可以通过设置&#xff1a;HPMAXLINES 值&#xff0c;来…