我在Spring中暴露了一些休息服务,使用spring mvc,我使用spring security来保护webapp,它使用服务器上的bcrypt对密码进行编码并将其存储在数据库中。
用户将在https下以纯文本形式在网址中发送密码。我已经编写了一个自定义的basic_auth_filter来检查uername和passowrd - 基本上进行身份验证。我还设置了一个只允许一个ip连接的防火墙。
我不是安全专家,我还需要其他什么,如果我在网址中对用户名/密码进行编码...即使它将通过https传输?
问候
PS。这是在网址上使用用户名的要求吗?
答案 0 :(得分:1)
密码和所有其他非短暂凭证永远不应该在URL中发送,如果没有其他原因那么因为浏览器和其他HTTP工具和服务器将在历史记录,各种日志等,HTTPS或不记住,任何有本地访问权限的人,或者只是看着你的肩膀,都会让人轻易窃取。这就是为什么Spring默认拒绝通过GET请求进行身份验证的原因。
因此,您应该将敏感参数移动到请求正文(因此需要POST)。
如果您的登录流程基于用户名/密码,我建议您使用UsernamePasswordAuthenticationFilter
,因为它已经封装了此类流程的逻辑和最佳实践。
答案 1 :(得分:1)
一般来说,您的方案是安全的。
考虑固定服务器,即验证服务器证书,以确保连接到您的服务器。
除了使用(在您的情况下)bcrypt。
进行身份验证之外,不应使用密码重新提问:“HTTPS加密查询字符串,只有实际的服务器地址部分是未加密的。但是,服务器可能会记录包含查询字符串的完整URL,因此具有安全隐患。最好是在POST中发送机密信息。