2009-10-15 26 views
0

背景安全与JSP /的JavaBeans/Servlet的/ MySQL的

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

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

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

问题

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

我假设有人可以进入会话,并调用对象(如果他们知道这一点?)与细节在和瞧?

还有什么替代方法?

回答

0

由于开始一个新的连接非常昂贵,连接保存在会话中。因此,后续页面将获得相同的连接对象。

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

尽管JDBC驱动程序并不保存它们(除非使用全局数据源,否则它不会),但这并不能使用户访问凭据。他们可以尝试调用连接对象上的方法,但这相当于黑客正在运行的Java虚拟机,除非无法安装所有可用的安全更新,否则很难做到这一点。

+0

感谢您的快速响应。在这种情况下,假定服务器是安全的(即其它安全应用程序运行它),并且将使用SSL。所以我认为这很好。 愚蠢的后续行动 - 我如何将连接对象保存到会话中,并将其传递给响应?或者这只是一个给定的? – ajr

+0

HttpServletRequest对象可以为您提供一个Session对象,您可以在其中存储任何您喜欢的对象。请参阅http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html#getSession%28%29 –