Browse Source

修复界面存在的一些安全问题

RuoYi 6 years ago
parent
commit
807b723116

+ 1 - 1
pom.xml

@@ -20,7 +20,7 @@
 		<shiro.version>1.4.0</shiro.version>
 		<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
 		<mybatis.boot.version>1.3.2</mybatis.boot.version>
-		<druid.version>1.1.10</druid.version>
+		<druid.version>1.1.13</druid.version>
 		<bitwalker.version>1.19</bitwalker.version>
 		<kaptcha.version>2.3.2</kaptcha.version>
 		<swagger.version>2.7.0</swagger.version>

+ 6 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
 import com.ruoyi.common.base.AjaxResult;
 import com.ruoyi.common.config.Global;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.file.FileUploadUtils;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.framework.config.ServerConfig;
@@ -45,9 +46,13 @@ public class CommonController
     @GetMapping("common/download")
     public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
     {
-        String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
         try
         {
+            if (!FileUtils.isValidFilename(fileName))
+            {
+                throw new Exception(StringUtils.format(" 文件名称({})非法,不允许下载。 ", fileName));
+            }
+            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
             String filePath = Global.getDownloadPath() + fileName;
 
             response.setCharacterEncoding("utf-8");

+ 0 - 1
ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js

@@ -282,7 +282,6 @@
         	        url: options.url,                                   // 请求后台的URL(*)
         	        ajaxParams: options.ajaxParams,                     // 请求数据的ajax的data属性
         	        height: options.height,                             // 表格树的高度
-        	        ajaxParams: {},                                     // 请求数据的ajax的data属性
         			expandColumn: options.expandColumn,                 // 在哪一列上面显示展开按钮
         			striped: options.striped,                           // 是否显示行间隔色
         			bordered: true,                                     // 是否显示边框

+ 3 - 2
ruoyi-common/src/main/java/com/ruoyi/common/page/PageDomain.java

@@ -1,6 +1,7 @@
 package com.ruoyi.common.page;
 
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.sql.SqlUtil;
 
 /**
  * 分页数据
@@ -57,7 +58,7 @@ public class PageDomain
 
     public void setOrderByColumn(String orderByColumn)
     {
-        this.orderByColumn = orderByColumn;
+        this.orderByColumn = SqlUtil.escapeSql(orderByColumn);
     }
 
     public String getIsAsc()
@@ -67,6 +68,6 @@ public class PageDomain
 
     public void setIsAsc(String isAsc)
     {
-        this.isAsc = isAsc;
+        this.isAsc = SqlUtil.escapeSql(isAsc);
     }
 }

+ 13 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java

@@ -13,6 +13,8 @@ import java.io.OutputStream;
  */
 public class FileUtils
 {
+    public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
+
     /**
      * 输出指定文件的byte数组
      * 
@@ -87,4 +89,15 @@ public class FileUtils
         }
         return flag;
     }
+
+    /**
+     * 文件名称验证
+     * 
+     * @param filename 文件名称
+     * @return true 正常 false 非法
+     */
+    public static boolean isValidFilename(String filename)
+    {
+        return filename.matches(FILENAME_PATTERN);
+    }
 }

+ 24 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java

@@ -0,0 +1,24 @@
+package com.ruoyi.common.utils.sql;
+
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * sql操作工具类
+ * 
+ * @author ruoyi
+ */
+public class SqlUtil
+{
+    /**
+     * 防止sql注入 替换危险字符
+     */
+    public static String escapeSql(String value)
+    {
+        if (StringUtils.isNotEmpty(value))
+        {
+            value = value.replaceAll("\\(", "");
+            value = value.replaceAll("\\)", "");
+        }
+        return value;
+    }
+}