servlets - 使用 ServletContext#getMimeType() 是否安全

标签 servlets mime-types

更具体地说,我正在使用:

public String getMimeType() {
    ServletContext context = request.getServletContext();
    String filePath = request.getRequestURI().substring(request.getContextPath().length()+1, request.getRequestURI().length());
    String fileName = context.getRealPath(filePath);        
    return context.getMimeType(fileName);
}

确定客户端请求的文件类型(css、js、字体等)。根据文件类型,会发生不同的操作。这在浏览器中是否一致,或者通常是一种根据 url 中传递的文件名确定文件类型的安全方法,或者它是否太容易破坏?

最佳答案

Is this consistent across browsers?

与文件扩展名关联的 mime 类型在此特定代码片段中,并非由客户端确定。由服务器根据<mime-mapping>确定web.xml 中的条目。客户端可以控制的只是 URL 中的文件扩展名。但你已经知道了。

所以,您最好问“这在服务器之间是否一致?”。答案是。每个服务器都有自己预定义的 mime 映射。较旧的服务器可能缺乏较新的 mime 类型(例如 XLSX、SVG 等)的映射。如果您想涵盖您感兴趣的每种 mime 类型,并且无法控制目标服务器及其配置,那么您可以更好地在 webapp 自己的 web.xml 中明确映射它.


与具体问题无关,请跳过getRealPath()废话。在一个像样的 Web 应用程序中从来不需要它。此外,从技术上讲,您根本不需要它。 URI 甚至唯一的文件名都适用于 getMimeType()方法。

关于servlets - 使用 ServletContext#getMimeType() 是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33138361/

相关文章:

php - 安全性:如何验证图像文件上传?

android - 如何设置自己的文件mime类型

python - 如何确定客户端是否需要 JSON 响应

ios - PDF 和 MFMailComposeViewController

java - Java servlet 中 Firebase 管理 key 的路径

java - JExcel 警告 : Could not add cell at A257 because it exceeds the maximum column limit'

jsp - Tomcat 提供另一个 URL

java - 在java中确定文件的mime类型的最佳方法?

java - 如何在java电子邮件中插入for语句

java - 如何在Eclipse项目中导入javax.servlet API?