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

打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

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

一、情况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 对用户输入进行验证。可以使用正则表达式或者内置的验证函数,确保输入符合预期的格式和要求。
  1. function validateInput(input) {
  2.     // 使用正则表达式验证输入
  3.     const regex = /^[a-zA-Z0-9_]+$/; // 例如,只允许字母、数字和下划线
  4.     return regex.test(input);
  5. }
复制代码
2.编码用户输入:在向后端发送数据之前,对用户输入进行编码,以确保特殊字符不会被表明为代码或指令。
  1. const userInput = document.getElementById('userInput').value;
  2. const encodedInput = encodeURIComponent(userInput);
复制代码
5.2 后端

后端过滤器/验证器:


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

六、其他办法

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

在使用 MyBatis 进行数据库查询时,可以使用其提供的分页插件来实现分页功能,比如 MyBatis 分页助手(MyBatis PageHelper)。
1.引入 PageHelper 依赖:在 Maven 或 Gradle 中引入 MyBatis 分页插件的依赖。
2.配置分页插件:在 MyBatis 的配置文件(通常是 application.yml 或 application.properties)中配置分页插件。
   mybatis:
          plugin:
                  pagehelper:
                          helperDialect: mysql
                          reasonable: true
                          supportMethodsArguments: true
   
   
3.在查询方法中使用分页:在需要分页查询的方法中,调用 PageHelper 的静态方法来设置分页参数。
  1. import com.github.pagehelper.PageHelper;
  2. import com.github.pagehelper.PageInfo;
  3. @Service
  4. public class UserService {
  5.     @Autowired
  6.     private UserMapper userMapper;
  7.     public List<User> getUsers(int pageNum, int pageSize) {
  8.         PageHelper.startPage(pageNum, pageSize);
  9.         return userMapper.getUsers();
  10.     }
  11. }
复制代码
过滤哀求参数:

使用拦截器(Interceptor):


  • 创建拦截器类:创建一个拦截器类,实现 HandlerInterceptor 接口,重写 preHandle 方法,在该方法中对哀求参数进行过滤或验证。
  • 注册拦截器:在 Spring Boot 应用程序中注册拦截器,以便它可以或许拦截到相应的哀求。
使用过滤器(Filter):


  • 创建过滤器类:创建一个过滤器类,实现 javax.servlet.Filter 接口,重写 doFilter 方法,在该方法中对哀求参数进行过滤或验证。
  • 配置过滤器:在 Spring Boot 应用程序中,可以通过 @Component 或者 @Configuration 注解来声明并配置过滤器。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表