JSP/JavaBeans/servlet/MySQL的安全性

JSP/JavaBeans/servlet/MySQL的安全性,mysql,security,jsp,servlets,Mysql,Security,Jsp,Servlets,背景 html页面将要求用户键入用户名和密码。这些是MySQL数据库的凭据(即,它们将在JDBC连接中使用,因此文件中不会物理存储密码) 提交时将调用一个servlet,该servlet尝试连接到数据库。如果可以,凭证是正确的,将加载JSP页面。否则,将显示一个错误 如果登录成功,web应用程序将使用servlet对数据库执行SQL查询/更新,并将JavaBean返回到JSP页面 问题 出于内存的考虑,我猜JDBC需要关闭,这意味着后续页面需要使用前面提供的凭据重新启动连接。显然,用户不希望每次

背景

html页面将要求用户键入用户名和密码。这些是MySQL数据库的凭据(即,它们将在JDBC连接中使用,因此文件中不会物理存储密码)

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

如果登录成功,web应用程序将使用servlet对数据库执行SQL查询/更新,并将JavaBean返回到JSP页面

问题

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

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


还有什么替代方案

由于启动新连接的费用非常昂贵,因此该连接会保存在会话中。因此,后续页面将获得相同的连接对象

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


不过,这并没有给他们访问凭据的权限,因为JDBC驱动程序也不保存凭据(除非您使用的是全局数据源,而您不使用)。他们可以尝试调用connection对象上的方法,但这相当于入侵正在运行的Java VM,除非您未能安装所有可用的安全更新,否则这相当困难。

感谢您的快速响应。在该场景中,假定服务器是安全的(即,其他安全应用程序运行该服务器),并将使用SSL。所以我认为这一切都很好。愚蠢的跟进-如何通过将连接对象传递给响应将其保存到会话?或者这只是一个给定的对象?HttpServletRequest对象可以为您提供一个会话对象,您可以在其中存储任何您喜欢的内容。看见