- 浏览: 190080 次
- 性别:
- 来自: 南京
文章分类
最新评论
前言:
在实际应用中,如果我们直接把密码以明文形式存储在数据库中存在一定的安全隐患。所以最好以某中方式将密码编码后再存储下来,用户登录时将用户输入的密码也按照相同的编码方式编码后和数据库中存储的密码相比较,即可以完成验证,也保证了密码等敏感信息的安全性。
1.在spring security中主要用PasswordEncoder对密码进行编码,因为历史版本的缘故,spring security中存在两个PasswordEncoder接口,一个存放在org.springframework.security.authentication.encoding包下面,只是为了和遗留系统兼容,已经不推荐使用,另一个放在org.springframework.security.crypto.password包下面,是重新设计的一套编码实现,新开发的应用应该采用这个包下的编码类。spring 给我们提供的认证实现类DaoAuthenticationProvider这两套密码编码方式都支持。
实际应用中不要选择普通的哈希函数如MD5、SHA,即便是追加了salted的版本也不要选,因为这种普通的哈希函数计算速度很快,这样攻击者就可以在很短时间内执行成百上千次的攻击。spring提供的org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder类是一个不错的选择,因为Bcrypt故意设计的计算速度很慢,就是为了应对密码攻击。记住在生产环境里,即便我们的数据库很安全也不要考虑把密码存储成明文形式。
2.那么什么是哈希呢
对密码进行哈希处理并不是spring security特有的概念,而是安全系统的一个通用概念。哈希算法是个单向函数,对输入的数据(如密码)进行计算,输出一个固定长度的数据(哈希码),例如对password字符进行MD5哈希后得到如下结果
哈希算法是单向的有两个意思,一是根据计算后的哈希码很难得到原始的输入数据(基本上是不可能的),二是只要输入的数据一样得到的哈希码都是一样的。正是这两个特性使得这个算法非常适合用来存储认证用户的密码信息,这样即便是存储用户信息的数据库被破解了,也不能用里面的信息登录我们的系统。
3.在哈希算法中加入Salt
单纯利用hash对密码进行编码有一个潜在的问题,因为现在有很多的黑客网站直接有哈希码和原始数据的对应结果,例如我们把5f4dcc3b5aa765d61d8327deb882cf99放在百度、google上搜素,我们很快就知道原始数据是password。而在实际应用中,用户都倾向与选择很相似的密码。因而当黑客想要攻击我们的网站时,他可以建立一个常见密码对应的哈希码的字典表,从而通过哈希码找到原始的密码值。为了应对这个攻击,我们可以选择高强度的密码策略,如最少位数限制,密码组合中至少有特殊字符、数字和字符等组成,另一种就是在计算哈希码时利用一个salt,作为对密码哈希时的附加值。理想情况下这个salt值越随机越好,加入salt后,攻击者想要破解原始密码就需要为每一个salt创建一个字典表,使破解的难度大大加大。spring推荐用的Bcrypt算法会自动的为我们生成一个随机的salt,并以特定的格式存储在计算后的哈希码中。
4.哈希和认证
当认证提供者(例如DaoAuthenticationProvider)需要验证用户提交的密码是否正确时,如果存储的用户密码经过了哈希处理,那么用户提交的密码必须经过相同的哈希算法处理,这个需要应用的开发者自己保证,因为spring security并不关系用户信息是如何存入数据库的。并且这个两个算法必须严格一致,假如你知道用户信息存入时用的是MD5算法,因而你在spring security中用Md5PasswordEncoder来编码,有时候还是会有问题,比如数据库存入时用了Base 64来做MD5编码,而Md5PasswordEncoder却用了默认的十六进制编码这样还是不能正确认证,所以在系统正式启用之前一定要哈希算法的一致并能正常认证成功。spring security推荐我们在两个地方都统一采用bcrypt,这样可以避免不必要的麻烦。
在实际应用中,如果我们直接把密码以明文形式存储在数据库中存在一定的安全隐患。所以最好以某中方式将密码编码后再存储下来,用户登录时将用户输入的密码也按照相同的编码方式编码后和数据库中存储的密码相比较,即可以完成验证,也保证了密码等敏感信息的安全性。
1.在spring security中主要用PasswordEncoder对密码进行编码,因为历史版本的缘故,spring security中存在两个PasswordEncoder接口,一个存放在org.springframework.security.authentication.encoding包下面,只是为了和遗留系统兼容,已经不推荐使用,另一个放在org.springframework.security.crypto.password包下面,是重新设计的一套编码实现,新开发的应用应该采用这个包下的编码类。spring 给我们提供的认证实现类DaoAuthenticationProvider这两套密码编码方式都支持。
实际应用中不要选择普通的哈希函数如MD5、SHA,即便是追加了salted的版本也不要选,因为这种普通的哈希函数计算速度很快,这样攻击者就可以在很短时间内执行成百上千次的攻击。spring提供的org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder类是一个不错的选择,因为Bcrypt故意设计的计算速度很慢,就是为了应对密码攻击。记住在生产环境里,即便我们的数据库很安全也不要考虑把密码存储成明文形式。
2.那么什么是哈希呢
对密码进行哈希处理并不是spring security特有的概念,而是安全系统的一个通用概念。哈希算法是个单向函数,对输入的数据(如密码)进行计算,输出一个固定长度的数据(哈希码),例如对password字符进行MD5哈希后得到如下结果
5f4dcc3b5aa765d61d8327deb882cf99
哈希算法是单向的有两个意思,一是根据计算后的哈希码很难得到原始的输入数据(基本上是不可能的),二是只要输入的数据一样得到的哈希码都是一样的。正是这两个特性使得这个算法非常适合用来存储认证用户的密码信息,这样即便是存储用户信息的数据库被破解了,也不能用里面的信息登录我们的系统。
3.在哈希算法中加入Salt
单纯利用hash对密码进行编码有一个潜在的问题,因为现在有很多的黑客网站直接有哈希码和原始数据的对应结果,例如我们把5f4dcc3b5aa765d61d8327deb882cf99放在百度、google上搜素,我们很快就知道原始数据是password。而在实际应用中,用户都倾向与选择很相似的密码。因而当黑客想要攻击我们的网站时,他可以建立一个常见密码对应的哈希码的字典表,从而通过哈希码找到原始的密码值。为了应对这个攻击,我们可以选择高强度的密码策略,如最少位数限制,密码组合中至少有特殊字符、数字和字符等组成,另一种就是在计算哈希码时利用一个salt,作为对密码哈希时的附加值。理想情况下这个salt值越随机越好,加入salt后,攻击者想要破解原始密码就需要为每一个salt创建一个字典表,使破解的难度大大加大。spring推荐用的Bcrypt算法会自动的为我们生成一个随机的salt,并以特定的格式存储在计算后的哈希码中。
4.哈希和认证
当认证提供者(例如DaoAuthenticationProvider)需要验证用户提交的密码是否正确时,如果存储的用户密码经过了哈希处理,那么用户提交的密码必须经过相同的哈希算法处理,这个需要应用的开发者自己保证,因为spring security并不关系用户信息是如何存入数据库的。并且这个两个算法必须严格一致,假如你知道用户信息存入时用的是MD5算法,因而你在spring security中用Md5PasswordEncoder来编码,有时候还是会有问题,比如数据库存入时用了Base 64来做MD5编码,而Md5PasswordEncoder却用了默认的十六进制编码这样还是不能正确认证,所以在系统正式启用之前一定要哈希算法的一致并能正常认证成功。spring security推荐我们在两个地方都统一采用bcrypt,这样可以避免不必要的麻烦。
发表评论
-
spring-security(二十五)鉴权
2018-03-27 11:21 1559前言 本文将详细探讨spring security中的鉴权 ... -
test
2018-03-19 21:20 0什么是服务发现 ... -
spring-security(二十四)CSRF
2018-03-24 09:54 81331.什么是CSRF攻击 下面我们以一个具体的例子来说明这种常见 ... -
spring-security(二十三)Remember-Me认证
2018-03-09 21:06 1297前言: Remember-me认证方式指的是能在不同的会话 ... -
spring-security(二十二)基本认证和摘要认证
2018-03-06 16:58 1771前言: 在web应用中,非常流行以基本认证和摘要认证作为备 ... -
spring-security(二十一)核心Filter-UsernamePasswordAuthenticationFilter
2018-03-04 11:05 1205一、UsernamePasswordAuthenticatio ... -
spring-security(二十)核心Filter-SecurityContextPersistenceFilter
2018-02-28 21:40 1074一、SecurityContextPersistenceFil ... -
spring-security(十九)核心Filter-ExceptionTranslationFilter
2018-02-27 16:31 2004前言: 在spring的安全 ... -
spring-security(十八)核心Filter-FilterSecurityInterceptor
2018-02-25 10:59 2275前言: 当用spring secur ... -
spring-security(二十六)整合CAS 实现SSO
2018-04-05 18:09 12151.cas 认证流程 2.spring security ... -
spring-security(十七)Filter顺序及简介
2018-02-22 18:16 7814前言: spring security在 ... -
spring-security(十六)Filter配置原理
2018-02-21 15:18 2352前言: spring security最常见的应用场景还是 ... -
spring-security(十四)UserDetailsService
2018-02-19 11:35 1443前言: 作为spring security的核心类,大多数 ... -
spring-security(十三)核心服务类
2018-02-18 16:46 1377前言: 在之前的篇章中我们已经讲述了spring secu ... -
spring-security(十二)鉴权方式概述
2018-02-18 10:42 2506前言: 本文主要讲述在spring security鉴权的 ... -
spring-security(十一)Web应用认证过程
2018-02-17 17:17 1216前言: 本文将探讨当 ... -
spring-security(十)基本认证过程
2018-02-17 13:55 2069前言: 在spring security中认证具体指的是什 ... -
spring-security(九)-核心组件
2018-02-17 10:46 841前言: 本文主要介绍在spring security中的几 ... -
spring-security(八)java config-sample之cas client
2018-02-16 11:26 2038前言: SSO英文全称Single Sign On,单点登 ... -
spring-security(七)java config-sample之concurrency
2018-02-15 10:51 644前言: 在实际应用中,我们可能会限制一个用户同时登录同一个 ...
相关推荐
赠送jar包:spring-security-crypto-5.5.2.jar; 赠送原API文档:spring-security-crypto-5.5.2-javadoc.jar; 赠送源代码:spring-security-crypto-5.5.2-sources.jar; 赠送Maven依赖信息文件:spring-security-...
赠送jar包:spring-security-oauth2-2.3.5.RELEASE.jar; 赠送原API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-2.3.5.RELEASE-sources.jar; 赠送Maven依赖信息...
赠送jar包:spring-security-core-5.3.9.RELEASE.jar; 赠送原API文档:spring-security-core-5.3.9.RELEASE-javadoc.jar; 赠送源代码:spring-security-core-5.3.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-jwt-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-jwt-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-jwt-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-crypto-5.6.1.jar; 赠送原API文档:spring-security-crypto-5.6.1-javadoc.jar; 赠送源代码:spring-security-crypto-5.6.1-sources.jar; 赠送Maven依赖信息文件:spring-security-...
赠送jar包:spring-security-core-5.2.0.RELEASE.jar; 赠送原API文档:spring-security-core-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-security-core-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-rsa-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-rsa-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-rsa-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-web-5.2.0.RELEASE.jar; 赠送原API文档:spring-security-web-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-security-web-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:spring-security-oauth2-2.3.5.RELEASE.jar; 赠送原API文档:spring-security-oauth2-2.3.5.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-2.3.5.RELEASE-sources.jar; 赠送Maven依赖信息...
赠送jar包:spring-security-core-5.5.2.jar; 赠送原API文档:spring-security-core-5.5.2-javadoc.jar; 赠送源代码:spring-security-core-5.5.2-sources.jar; 赠送Maven依赖信息文件:spring-security-core-...
赠送jar包:spring-security-web-5.6.1.jar; 赠送原API文档:spring-security-web-5.6.1-javadoc.jar; 赠送源代码:spring-security-web-5.6.1-sources.jar; 赠送Maven依赖信息文件:spring-security-web-5.6.1....
springSecurity spring-security jar 开发所需jar包
赠送jar包:spring-security-oauth2-autoconfigure-2.1.8.RELEASE.jar; 赠送原API文档:spring-security-oauth2-autoconfigure-2.1.8.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-autoconfigure-...
赠送jar包:spring-security-config-5.0.7.RELEASE.jar; 赠送原API文档:spring-security-config-5.0.7.RELEASE-javadoc.jar; 赠送源代码:spring-security-config-5.0.7.RELEASE-sources.jar; 赠送Maven依赖信息...
赠送jar包:spring-security-core-5.5.2.jar; 赠送原API文档:spring-security-core-5.5.2-javadoc.jar; 赠送源代码:spring-security-core-5.5.2-sources.jar; 赠送Maven依赖信息文件:spring-security-core-...
赠送jar包:spring-security-core-5.6.1.jar; 赠送原API文档:spring-security-core-5.6.1-javadoc.jar; 赠送源代码:spring-security-core-5.6.1-sources.jar; 赠送Maven依赖信息文件:spring-security-core-...
赠送jar包:spring-security-jwt-1.0.10.RELEASE.jar; 赠送原API文档:spring-security-jwt-1.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-security-jwt-1.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:...
spring-security-web源码 所需jar包
赠送jar包:spring-security-core-5.6.1.jar; 赠送原API文档:spring-security-core-5.6.1-javadoc.jar; 赠送源代码:spring-security-core-5.6.1-sources.jar; 赠送Maven依赖信息文件:spring-security-core-...
赠送jar包:spring-security-oauth2-autoconfigure-2.1.8.RELEASE.jar; 赠送原API文档:spring-security-oauth2-autoconfigure-2.1.8.RELEASE-javadoc.jar; 赠送源代码:spring-security-oauth2-autoconfigure-...