我正在使用Checkmarx安全工具来扫描我的代码。我得到:
访问控制授权不当
在读/写方法上,同时将数据写入文件输出流。
private ByteArrayOutputStream createToByteArray(String fileName) throws IOException {
byte[] buf = new byte[1024];
try (InputStream is = Files.newInputStream(Paths.get(fileName))) {
int len = is.read(buf);
ByteArrayOutputStream os = new ByteArrayOutputStream();
while (len != -1) {
os.write(buf, 0, len);
len = is.read(buf);
}
return os;
}
}
如果有人在检查马克思的特定部分以下变得低严重。
Paths.get(文件名(
然后尝试使用 resolve(( 方法,例如
Paths.get(fileName).resolve("")
resolve (( ->此方法用于针对此路径解析给定路径。
有关 resolve(( 的更多信息,请参阅此处
您希望用户可以按path
从文件系统中读取文件并将其转换为ByteStream
。好。
但是,如果用户为您提供绝对文件路径怎么办?还是相对的(例如../../.ssh/id_rsa
(?
无论谁在发送请求,请求的访问权限实际上是服务器的访问权限(当然,因为此代码在服务器上运行(。
因此,您需要验证用户访问权限,以避免访问控制授权不当。
这个答案的例子:
if (user.equals("admin")){
try (InputStream is = Files.newInputStream(Paths.get(fileName))) {
...
}
}
另外,我的建议是从filename
输入路径中删除任何相对路径。