gpt4 book ai didi

文件上传到服务器的安全漏洞 - java ee - tomcat

转载 作者:行者123 更新时间:2023-11-28 23:23:21 24 4
gpt4 key购买 nike

我正在尝试构建一个 Web 应用程序,它可以将文件上传到我的服务器,并获取一个链接以便稍后下载。

我用下一个代码使这两个问题变得正确:

    String subirArchivo(int codigo, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
Part filePart = request.getPart("archivo"); // Obtiene el archivo
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.

//InputStream fileContent = filePart.getInputStream(); //Lo transforma en InputStream

String path="/archivos/";
File uploads = new File(path); //Carpeta donde se guardan los archivos
uploads.mkdirs(); //Crea los directorios necesarios
File file = File.createTempFile("cod"+codigo+"-", "-"+fileName, uploads); //Evita que hayan dos archivos con el mismo nombre

try (InputStream input = filePart.getInputStream()){
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}

return file.getPath();
}

当文件上传到 C:\archivos 时,我必须添加

<Context docBase="C:\archivos" path="/archivos" />

来自 tomcat 配置的 server.xml 中。

问题在于用户可以上传文件并执行。比如他上传一个.jsp文件,当用户调用的时候,由服务器执行

我的问题是。怎么解决?

最佳答案

感谢 nikos-paraskevopoulos,我找到了如何以正确的方式上传和下载我的文件:

上传:

    String subirArchivo(int codigo, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
Part filePart = request.getPart("archivo"); // Obtiene el archivo
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix.

if(!fileName.isEmpty()){
String path="/archivos/";
File uploads = new File(path); //Carpeta donde se guardan los archivos
uploads.mkdirs(); //Crea los directorios necesarios
File file = File.createTempFile("cod"+codigo+"-", "-"+fileName, uploads); //Evita que hayan dos archivos con el mismo nombre

try (InputStream input = filePart.getInputStream()){
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}

return file.getPath();
}
return null;
}

发布链接:

if(adjunto!=null){
String filename=adjunto.substring(10); //La longitud de /archivos/
String borrar="<a href=borrarServlet?codigo="+codigo+"&comentario="+idComentario+"&file="+filename+"><img width=\"16\" src=images/borrar.png></img></a>";
comentarios+="<tr><td>"+fecha+"</td>"+"<td>"+texto+"<br><a class=\"adj\" href=."+adjunto+">Descargar archivo</a></td><td>"+borrar+"</td></tr>";
}

下载:

String filename = URLDecoder.decode(request.getPathInfo().substring(1), "UTF-8");
File file = new File("/archivos", filename);
response.setHeader("Content-Type", getServletContext().getMimeType(filename));
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
Files.copy(file.toPath(), response.getOutputStream());

关于文件上传到服务器的安全漏洞 - java ee - tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40107776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com