我正在为我的Web应用程序使用spring security . 我想在将密码文本发送到服务器之前对其进行编码 . 以下是我的代码:
spring security.xml文件
<!-- AUTHENTICATION MANAGER -->
<authentication-manager alias="authenticationManager">
<!-- AUTHENTICATION PROVIDERS -->
<!-- Remember-Me Authentication Provider -->
<authentication-provider ref="rememberMeAuthenticationProvider"></authentication-provider>
<!--
Authentication Provider to make use of spring security provided Jdbc
user management service
-->
<authentication-provider user-service-ref="jdbcUserService">
<!--SHA-1 Password Encoding scheme to secure user credential-->
<password-encoder ref="sha2PasswordEncoder" />
</authentication-provider>
</authentication-manager>
<!-- SHA-1 Password Encoder -->
<bean id="sha2PasswordEncoder"
class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
<constructor-arg value="256" />
</bean>
即使使用了这个,我在服务器端以纯文本形式获取密码,我希望使用spring security在服务器端以编码形式获得密码 .
我已经以加密形式将密码存储在数据库中 . 我是Spring的初学者,所以可能这个问题很简单,我遗漏了一些基本的东西 . 任何参考实现都会有所帮助 .
提前致谢 .
4 回答
这就是Spring的工作方式 - 表单将密码以纯文本形式传输到后端,但这是HTTPS中的POST - 黑客如何破解密码?
(稍后,Spring会对密码进行加密,并与数据库进行比较,其中密码也会被加密)
您应该注意的是运行在HTTPS下提交登录表单的URL . 你提出的几乎所有其他方案都是不安全的 .
使用HTTPS,浏览器和Web服务器将根据TLS标准处理加密,并且表单中的所有数据将被安全地提交,窃听者很少有机会通过线路收听(或者空中交通) .
如果您使用数据库来存储密码,那么Spring Security的密码哈希就会发挥作用,因为您绝不应该以明文形式存储密码
尝试使用http://www.webtoolkit.info/javascript-sha256.html之类的东西在浏览器中加密密码
但是请确保使用基于用户(可以使用AJAX检索)的某种盐来散列密码 .
请参阅http://www.plynt.com/blog/2006/06/sending-salted-hashes-just-got/的最后一段,参见可能的方法 .
PS:如果你没有使用TLS / SSL,即使这样做也没有意义,如果你已经在使用它,我认为没有必要为此付出努力,除非你的应用程序需要几乎愤世嫉俗的安全级别 .
参考:https://softwareengineering.stackexchange.com/a/76947 https://stackoverflow.com/a/3391275/876142
以下是我申请上述问题的解决方案 .
如上面的代码我使用sha256编码器编码密码文本 . 在服务器端,我已禁用 spring 编码器,它编码来自客户端的密码 . 因此,在服务器上,它直接匹配从客户端到db哈希值的散列值 .