我正在玩servlet和jsp。我想创建一个简单的应用程序。进入后会有登录页面。用户可以输入他的登录名/密码或自行注册。我想知道,如果我想要保护密码不被“截获”,我应该使用https吗?或者是否有其他方法可以在应用程序级别上保护密码?
如果只是这样,是否可以仅从https限制对应用的访问? (如果相关,我正在使用Tomcat。)
答案 0 :(得分:2)
您需要获得动态数据和静态数据的安全性。所以你需要两者。在传输级别,它是SSL(HTTPS),并且在持久性级别通常为hash the password with a salt,并且在显示时您显然希望掩盖输入的密码。
答案 1 :(得分:1)
如果我想要保护密码不被“截获”,我应该使用https吗?或者是否有其他方法可以在应用程序级别保护密码?
是的,HTTPS就是为此目的而设计的。不,当您想要使用HTTP时,没有其他方法。要在Tomcat上配置HTTPS,请阅读Tomcat SSL Configuration HOW-TO。
如果只是这样,是否可以仅从https限制对应用的访问? (如果相关,我使用的是Tomcat。)
是的,这是可能的。使用容器管理的身份验证时,您可以通过在CONFIDENTIAL
中将传输保证设置为web.xml
来强制执行此操作。另见Java EE 6 tutorial - Securing web applications。 Tomcat与此处不相关,您只需要确保它支持HTTPS,如前所述。
<security-constraint>
...
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
如果您正在进行家庭认证,那么您需要实现自定义filter,以检查ServletRequest#isSecure()
是否返回false
并将重定向发送到正确的HTTPS URL方案。