Servlet 3注释会启用秘密后门访问吗?

时间:2010-08-06 13:52:15

标签: java servlets annotations

我希望人们不介意我提出一个稍微未来凝视的问题。如果我的理解不正确,请原谅我(请告诉我!) Servlet 3 引入了几个新的注释,包括:

@WebServlet

@WebFilter

@WebListener

还有一个名为 web-fragment.xml 的东西。这些似乎都旨在使部署servlet,过滤器和监听器成为可能,而无需编辑web.xml。

这是否意味着如果我从一个不道德的提供者那里包含一个JAR文件,他们可以在我不知情的情况下在我的Web应用程序中显示servlet,过滤器和监听器?

4 个答案:

答案 0 :(得分:4)

也许,也许不是。 (我不确定)。但是如果你担心不道德的提供者可能会在他们的JAR中做的事情,那么他们可以用普通的旧Java做一些其他令人讨厌的事情。如果你担心这种事情,你真的需要坚持获取源代码,并且在将代码放到生产服务器上之前需要对代码进行彻底的审核。

答案 1 :(得分:3)

他们可以,但这里的问题不在规范中:它是在运行不受信任的代码。如果你允许一个你不信任的jar加载和运行,那么它可能做的事情比表面化servlet要糟糕得多。

答案 2 :(得分:2)

您可以在主web.xml部署描述符中使用<absolute-ordering>元素仅列出WEB-INF / lib中的jar文件,您希望自动分析这些文件以获取注释和web-fragment.xml描述符在部署期间。

如果这样做,则不会自动部署其他JAR文件中的Web片段或带注释的类的内容。

答案 3 :(得分:1)

您可以控制此过程,引自here

  

Servlet 3.0规范也   提供指导的选项   Web容器,无论是容器   应该处理定义的注释   在Web组件上。的名字   元素是元数据完整的,它是   web-app元素的子元素。   元数据完整元素   表示是否为元数据   信息可在   部署描述符已完成。所以,   如果元数据的值完整   element设置为true,   那就意味着元   部署中找到的信息   描述符是完整的并且最终   网上定义的注释   组件将被忽略   Servlet容器。如果值为   metadata-complete设置为false,   那就意味着信息在   部署描述符不是   完整和Web组件装饰   带注释,如果有的话,应该是   由网络扫描和处理   容器