Skip to content

Commit 49a6427

Browse files
authored
Merge pull request #13560 from PasanT9/fix-112
Fix issues in throttling policy import API
2 parents 7f1e1cf + 42feb63 commit 49a6427

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/importexport/ImportExportConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public final class ImportExportConstants {
7272

7373
public static final String JSON_EXTENSION = ".json";
7474
public static final String YAML_EXTENSION = ".yaml";
75+
public static final String YML_EXTENSION = ".yml";
7576

7677
// Image resource
7778
public static final String IMAGE_RESOURCE = "Image";

components/apimgt/org.wso2.carbon.apimgt.rest.api.admin.v1/src/main/java/org/wso2/carbon/apimgt/rest/api/admin/v1/impl/ThrottlingApiServiceImpl.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1225,13 +1225,32 @@ public Response exportThrottlingPolicy(String policyId, String policyName, Strin
12251225
*/
12261226
public static ExportThrottlePolicyDTO getImportedPolicy(InputStream uploadedInputStream, Attachment fileDetail)
12271227
throws ParseException, APIImportExportException, IOException {
1228+
12281229
File importFolder = CommonUtil.createTempDirectory(null);
12291230
String uploadFileName = fileDetail.getContentDisposition().getFilename();
1230-
String fileType = (uploadFileName.contains(ImportExportConstants.YAML_EXTENSION)) ?
1231+
if (StringUtils.isEmpty(uploadFileName)) {
1232+
throw new APIImportExportException("Invalid file name. File name cannot be null or empty.");
1233+
}
1234+
// Validate file extension to prevent uploading unauthorized file types
1235+
String lowerCaseFileName = uploadFileName.toLowerCase();
1236+
boolean isYamlFile =
1237+
lowerCaseFileName.endsWith(ImportExportConstants.YAML_EXTENSION) || lowerCaseFileName.endsWith(
1238+
ImportExportConstants.YML_EXTENSION);
1239+
boolean isJsonFile = lowerCaseFileName.endsWith(ImportExportConstants.JSON_EXTENSION);
1240+
if (!isYamlFile && !isJsonFile) {
1241+
throw new APIImportExportException("Invalid file type. Only YAML and JSON files are allowed.");
1242+
}
1243+
String fileType = isYamlFile ?
12311244
ImportExportConstants.EXPORT_POLICY_TYPE_YAML :
12321245
ImportExportConstants.EXPORT_POLICY_TYPE_JSON;
1246+
// Validating the canonical path
12331247
String absolutePath = importFolder.getAbsolutePath() + File.separator + uploadFileName;
12341248
File targetFile = new File(absolutePath);
1249+
String canonicalPath = targetFile.getCanonicalPath();
1250+
String canonicalImportPath = importFolder.getCanonicalPath();
1251+
if (!canonicalPath.startsWith(canonicalImportPath + File.separator)) {
1252+
throw new APIImportExportException("Invalid file name.");
1253+
}
12351254
FileUtils.copyInputStreamToFile(uploadedInputStream, targetFile);
12361255
return preprocessImportedArtifact(absolutePath, fileType);
12371256
}

0 commit comments

Comments
 (0)