【问题标题】:Security with JSP/JavaBeans/Servlets/MySQLJSP/JavaBeans/Servlets/MySQL 的安全性
【发布时间】:2009-10-15 14:03:32
【问题描述】:

背景

一个 html 页面会要求用户输入他们的用户名和密码。这些是 MySQL 数据库的凭据(即它们将用于 JDBC 连接,因此文件中没有物理存储密码)。

在提交时将调用一个 servlet,它会尝试连接到数据库。如果可以,则凭证是正确的,并且将加载 JSP 页面。否则,将显示错误。

如果登录成功,则 Web 应用程序将使用 servlet 在数据库上执行 SQL 查询/更新并将 Java Beans 返回到 JSP 页面。

问题

出于内存目的,我猜测 JDBC 将需要关闭,这意味着后续页面将需要使用之前提供的凭据重新启动连接。显然,用户不想每次都提供密码,所以无论如何都必须存储它。如果它们存储在该会话的 Java 对象/bean 中(考虑到它必须是明文以便可以检索和使用)......它们是否容易受到攻击?将其作为文本存储在代码中是不是很糟糕?

我假设有人可以侵入会话并调用对象(如果他们知道这一点?)并提供详细信息,瞧?

还有哪些选择?

【问题讨论】:

    标签: mysql security jsp servlets


    【解决方案1】:

    由于启动一个新连接的开销如此之大,所以连接被保存在会话中。因此后续页面获得相同的连接对象。

    至于安全性:这与您的网络服务器一样安全。如果有人可以访问主机并以运行 Web 服务器的用户或 root 用户身份登录,他们就可以访问该进程。

    但是,这并没有让他们访问凭据,因为 JDBC 驱动程序也不会保存它们(除非您使用您不使用的全局数据源)。他们可以尝试调用连接对象上的方法,但这相当于破解正在运行的 Java VM,除非您未能安装所有可用的安全更新,否则这很难做到。

    【讨论】:

    • 感谢您的快速响应。在该场景中,假设服务器是安全的(即运行它的其他安全应用程序)并且将使用 SSL。所以我假设这一切都很好。愚蠢的跟进 - 如何通过将连接对象传递给响应来将其保存到会话?还是这只是给定的?
    • HttpServletRequest 对象可以为您提供一个 Session 对象,您可以在其中存储您喜欢的任何内容。见java.sun.com/javaee/5/docs/api/javax/servlet/http/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2022-01-22
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多