【问题标题】:Using JSP as template parsing engine - security concerns使用 JSP 作为模板解析引擎 - 安全问题
【发布时间】:2014-02-08 14:00:48
【问题描述】:

我有一个关于 JSP 模板解析引擎的问题。

我目前正在构建的是允许客户在 JSP 中编写自己的模板(在网页的文本区域内),然后可以将其用于电子邮件、登录页面等。

除了我在 HttpRequest 中设置的 ${variables} 提供的数据之外,JSP 标记/scriptlet 能否用于访问数据?

换句话说,让客户直接访问 JSP 模板引擎会带来安全风险吗?如果是这样,我可以打开/关闭某些会带来安全风险的 JSP 标签吗?

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    JSP 与 HTTP 请求生命周期紧密绑定。 JSP 直接编译成实现HttpServlet 的Java 类。使用 scriptlet,您会在系统中引入非常明显的安全漏洞(JSP 作者可以在您的服务器上编写和执行任意 Java 代码)。

    TL;DR JSP 对于您的用例来说是非常糟糕的选择。使用不完全基于 HTTP 请求的模板引擎(字符串模板、Freemarker 等)。

    【讨论】:

    • 如果我禁用 scriptlet,是否还有其他潜在的安全漏洞?据我了解,如果没有scriptlet,唯一可以访问的是在HttpRequest中显式设置的变量,如果没有显式设置,就不能使用?
    • 你是如何编译和调用 JSP 的? AFAIK 没有如何手动编译 JSP 的标准方法,也没有标准方法如何在没有请求上下文的情况下调用它们......它们由 servlet 容器管理和调用。在我看来,使用 JSP 来呈现电子邮件将是一种丑陋的 hack。
    • 我已经写了一个可以解析JSP的原型,它基本上是截取输出并将其写入StringBuffer。 stackoverflow.com/questions/456148/…
    • 字符串模板实际上看起来不错,将尝试使用它而不是 JSP。谢谢帕维尔。
    • 如果您希望有一个发送电子邮件的后台任务,您将无法执行此操作,因为您无权访问请求调度程序。这种方法对我来说是不行的。
    猜你喜欢
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2011-06-14
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多