1. 概述

在程序部署时,我们可能会遇到一些网络的攻击,因此我们程序需要注意一些关于安全的问题。

2. 安全问题解决办法

2.1. 参数值溢出

这个问题是在模拟输入数据过长,会产生数据溢出,比如 一个用户对象的名称,在攻击时,客户端使用过长的字符串,解决办法是限制客户提交的长度。

我们使用在代码上增加注解的方法来限制客户输入数据的长度,当然也可以做其他的限制。

在我们的 BaseController 增加保存时对对象的验证。

  1. import org.springframework.validation.annotation.Validated;
  2. public JsonResult save(@Validated @ApiParam @RequestBody E entity, BindingResult validResult) throws Exception{

这里对提交的数据进行验证,当验证失败会向客户端抛出错误信息。

在需要验证的类中增加注解:

  1. @Size(max = 8,message = "最大长度不能超过8")
  2. @TableField(value = "ALIAS_")
  3. private String alias;

注解列表如下:

这个问题需要在开发的时候进行解决。

2.2. SQL注入

SQL 注入的问题主要出现在列表中,这个问题出现在从URL传入参数时,出现了注入问题。

我们的修改方案是,在获取客户端提交的参数时,我们对参数进行了过滤,当参数中的数据出现了 SQL注入的代码时,我们检查参数,并抛出异常。

具体的修改代码为:

  1. //StringUtils 增加检测是否有注入方法。
  2. public static boolean isSqlInject(String injectStr) {
  3. String injStr = "'|and|exec|create|insert|select|delete|update|count|*|%|chr|mid|master|truncate|drop|char|declare|;|or|-|+|,";
  4. String injStrArr[] = injStr.split("\\|");
  5. injectStr = injectStr.toLowerCase();
  6. for (int i = 0; i < injStrArr.length; i++) {
  7. if (injectStr.indexOf(injStrArr[i]) >= 0) {
  8. throw new RuntimeException("参数有SQL注入问题");
  9. }
  10. }
  11. return false;
  12. }

这个方法在列表的被调用

  1. public static Map<String,Object> getParameterValueMap(HttpServletRequest request, boolean remainArray)

在构建QueryFilter代码中使用。

  1. private static void getSqlQueryParams(QueryData queryData,QueryFilter queryFilter){
  2. if(BeanUtil.isEmpty(queryData.getParams())){
  3. return;
  4. }
  5. Iterator<Map.Entry<String,String>> paramsIt=queryData.getParams().entrySet().iterator();
  6. while (paramsIt.hasNext()){
  7. Map.Entry<String,String> keyVals=paramsIt.next();
  8. if(BeanUtil.isEmpty(keyVals.getValue())){
  9. continue;
  10. }
  11. if(!keyVals.getKey().startsWith("Q_")){
  12. if(!StringUtils.isSqlInject(keyVals.getValue()) ){
  13. queryFilter.addParam(keyVals.getKey(),keyVals.getValue());
  14. }
  15. }else{
  16. QueryParam queryParam= QueryFilter.getQueryParams(keyVals.getKey(),keyVals.getValue());
  17. queryFilter.addQueryParam(queryParam);
  18. }
  19. }
  20. }
文档更新时间: 2021-08-28 12:18   作者:zyg