关于后端:异常参数处理如何处理前端传递的非法参数确保系统安全稳定

53次阅读

共计 3227 个字符,预计需要花费 9 分钟才能阅读完成。

以后端将参数传递给后端时,思考到各种异常情况,以下是对应的解决示例:

  1. 短少必要的参数:

    • 异常情况:前端未传递必要的参数,导致后端无奈失常解决申请。
    • 解决方案:在后端进行参数校验,如果必要的参数缺失,则返回错误信息给前端。
    • 示例代码:
    @PostMapping("/example")
    public ResponseEntity<String> handleExampleRequest(@RequestParam String requiredParam) {if (requiredParam == null || requiredParam.isEmpty()) {return ResponseEntity.badRequest().body("Required parameter is missing");
        }
        // 解决申请的逻辑
        return ResponseEntity.ok("Request processed successfully");
    }
  2. 参数格局谬误:

    • 异常情况:前端传递的参数格局与后端要求的格局不匹配,如字符串传递给了数字类型的参数。
    • 解决方案:在后端进行参数类型校验,查看参数格局是否符合要求,并返回相应的错误信息。
    • 示例代码:
    @PostMapping("/example")
    public ResponseEntity<String> handleExampleRequest(@RequestParam Integer numericParam) {if (numericParam == null) {return ResponseEntity.badRequest().body("Invalid parameter format");
        }
        // 解决申请的逻辑
        return ResponseEntity.ok("Request processed successfully");
    }
  3. 参数越界或超出限度:

    • 异常情况:前端传递的参数超出了后端的容许范畴,如传递了一个超过最大长度的字符串。
    • 解决方案:在后端进行参数范畴查看,确保参数值在正当的范畴内,并返回相应的错误信息。
    • 示例代码:
    @PostMapping("/example")
    public ResponseEntity<String> handleExampleRequest(@RequestParam String textParam) {if (textParam == null || textParam.length() > 100) {return ResponseEntity.badRequest().body("Parameter length exceeds the limit");
        }
        // 解决申请的逻辑
        return ResponseEntity.ok("Request processed successfully");
    }
  4. 参数安全性问题:

    • 异常情况:前端传递的参数存在安全漏洞,如跨站脚本攻打 (XSS)、SQL 注入等。
    • 解决方案:在后端进行输出验证和数据过滤,避免歹意输出对系统造成平安危险。
    • 示例代码:
    @PostMapping("/example")
    public ResponseEntity<String> handleExampleRequest(@RequestParam String inputParam) {String filteredParam = sanitizeInput(inputParam);
        // 解决申请的逻辑,应用过滤后的参数
        return ResponseEntity.ok("Request processed successfully");
    }
    
    private String sanitizeInput(String input) {
        // 进行输出验证和过滤,避免安全漏洞
        // ...
        return filteredInput;
    }
  5. 参数关联性谬误:

    • 异常情况:前端传递的参数之间存在逻辑关联,但关联关系不正确或不残缺。
    • 解决方案:在后端进行参数关联性验证,确保参数之间的逻辑关系正确,并返回相应的错误信息。
    • 示例代码:
    @PostMapping("/example")
    public ResponseEntity<String> handleExampleRequest(@RequestParam String param1, @RequestParam String param2) {if (param1.equals("A") && param2.isEmpty()) {return ResponseEntity.badRequest().body("Param2 is required when param1 is'A'");
        }
        // 解决申请的逻辑
        return ResponseEntity.ok("Request processed successfully");
    }
  6. 参数反复或抵触:

    • 异常情况:前端传递的参数中存在反复或抵触的状况,导致后端无奈精确解决申请。
    • 解决方案:在后端进行参数重复性查看,并返回相应的错误信息或执行适当的抵触解决策略。
    • 示例代码:
    @PostMapping("/example")
    public ResponseEntity<String> handleExampleRequest(@RequestParam String param1, @RequestParam String param2) {if (param1.equals(param2)) {return ResponseEntity.badRequest().body("Param1 and param2 cannot have the same value");
        }
        // 解决申请的逻辑
        return ResponseEntity.ok("Request processed successfully");
    }
  7. 业务上的数据不存在时, 以删除为例,在删除操作后,依据操作后果返回不同的响应。如果删除胜利,将返回 200 OK 状态码和胜利音讯;如果未找到对应的数据,将返回 404 Not Found 状态码和谬误音讯。

    @DeleteMapping("/{id}")
    public ResponseEntity<String> removeById(@PathVariable Integer id) {if (id == null) {return ResponseEntity.badRequest().body("ID 不能为空");
     }
    
     LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<>();
     queryWrapper.eq(Book::getId, id);
     boolean removed = bookService.remove(queryWrapper);
    
     if (removed) {return ResponseEntity.ok("删除胜利");
     } else {return ResponseEntity.notFound().body("未找到对应的数据");
     }
    }
    
  8. 还有在参数上间接进行校验,防止为空,如果传入的 id 参数为 null,在办法执行前就会触发参数校验,抛出 javax.validation.ConstraintViolationException 异样。这样能够确保在调用接口时,对 id 参数进行了校验,防止了空指针异样或其余谬误的解决。

    @DeleteMapping("/{id}")
    public boolean removeById(@PathVariable @NotNull Integer id) {
     // 办法体
     LambdaQueryWrapper<Book> qw = new LambdaQueryWrapper<>();
     qw.eq(id != null, Book::getId, id);
     return bookService.remove(qw);
    }
    

以上是针对不同异常情况的解决示例,咱们能够依据具体业务需要和参数校验的要求,在后端进行相应的解决逻辑和错误信息返回。

本文由 mdnice 多平台公布

正文完
 0