Skip to content

Commit

Permalink
[Improvement] Abnormal characters check (#15824)
Browse files Browse the repository at this point in the history
* abnormal characters check

* add test case

* remove error log

* fix code style

* fix import
  • Loading branch information
pinkfloyds committed Apr 12, 2024
1 parent 883848f commit e5e7749
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package org.apache.dolphinscheduler.api.service.impl;

import static org.apache.dolphinscheduler.api.utils.CheckUtils.checkFilePath;
import static org.apache.dolphinscheduler.common.constants.Constants.ALIAS;
import static org.apache.dolphinscheduler.common.constants.Constants.CONTENT;
import static org.apache.dolphinscheduler.common.constants.Constants.EMPTY_STRING;
Expand Down Expand Up @@ -1290,6 +1291,10 @@ private void checkFullName(String userTenantCode, String fullName) {
if (FOLDER_SEPARATOR.equalsIgnoreCase(fullName)) {
return;
}
// abnormal characters check
if (!checkFilePath(fullName)) {
throw new ServiceException(Status.ILLEGAL_RESOURCE_PATH);
}
// Avoid returning to the parent directory
if (fullName.contains("../")) {
throw new ServiceException(Status.ILLEGAL_RESOURCE_PATH, fullName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,14 @@ private static boolean regexChecks(String str, Pattern pattern) {

return pattern.matcher(str).matches();
}

/**
* regex FilePath check,only use a to z, A to Z, 0 to 9, and _./-
*
* @param str input string
* @return true if regex pattern is right, otherwise return false
*/
public static boolean checkFilePath(String str) {
return regexChecks(str, Constants.REGEX_FILE_PATH);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,24 @@ public void testCheckPhone() {
Assertions.assertTrue(CheckUtils.checkPhone("17362537263"));
}

/**
* check file path
*/
@Test
public void testCheckFilePath() {
// true
Assertions.assertTrue(CheckUtils.checkFilePath("/"));
Assertions.assertTrue(CheckUtils.checkFilePath("xx/"));
Assertions.assertTrue(CheckUtils.checkFilePath("/xx"));
Assertions.assertTrue(CheckUtils.checkFilePath("14567134578654"));
Assertions.assertTrue(CheckUtils.checkFilePath("/admin/root/"));
Assertions.assertTrue(CheckUtils.checkFilePath("/admin/root/1531531..13513/153135.."));
// false
Assertions.assertFalse(CheckUtils.checkFilePath(null));
Assertions.assertFalse(CheckUtils.checkFilePath("file://xxx/ss"));
Assertions.assertFalse(CheckUtils.checkFilePath("/xxx/ss;/dasd/123"));
Assertions.assertFalse(CheckUtils.checkFilePath("/xxx/ss && /dasd/123"));
Assertions.assertFalse(CheckUtils.checkFilePath("/xxx/ss || /dasd/123"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,11 @@ private Constants() {
*/
public static final Pattern REGEX_USER_NAME = Pattern.compile("^[a-zA-Z0-9._-]{3,39}$");

/**
* file path regex
*/
public static final Pattern REGEX_FILE_PATH = Pattern.compile("^[a-zA-Z0-9_./-]+$");

/**
* read permission
*/
Expand Down

0 comments on commit e5e7749

Please sign in to comment.