某大厂被曝明文存储密码!

离了个大谱,昨晚看到一个炸裂的新闻:Meta(前 Facebook) 由于明文存储密码,导致被爱尔兰罚款 9100 万欧元(当前约 7.11 亿元人民币)。

图片

这一事件的起因可以追溯到 2019 年的一次安全审查。当时,Meta 被发现其旗下的 Facebook 和 Instagram 在内部系统中直接以明文形式存储了超过 6 亿个用户密码。更令人震惊的是,其中一些密码自 2012 年以来就以明文格式存在于公司服务器上,并且这些信息甚至可以被超过 2 万名 Facebook 员工随意搜索和查看。

图片

正如我在前段时间阿里云盘出现的史诗级 Bug 时说的那样:这个世界本质上就是一个巨大的“草台班子”。无论多大的企业或多知名的技术公司,它们的运作远不如我们想象的完美。

Meta 此次事件再次证明,即便是大型企业,也难以完全避免管理上的疏漏,特别是在数据安全方面。

对于爱尔兰监管机构的高额罚款,我简直不要太赞同!用户数据的安全保护至关重要,任何疏忽都可能导致严重的安全风险。如果服务端能够直接访问用户的原始密码,那么泄露风险将大大增加,用户的隐私和安全将受到严重威胁。

在我的另一篇文章中详细介绍过:服务端不应存储用户的原始密码,而是通过哈希算法生成哈希值进行保存。这种方法是不可逆的,相当于对密码进行了加密(严格来说,哈希算法不属于加密算法,但可用于某些加密场景)。

推荐的密码存储方式包括:

  1. 使用高安全性的加密哈希算法加盐(Salt):例如 SHA2、SHA3、SM3 等,这些算法具有更高的抗碰撞性和安全性。

  2. 采用慢哈希算法:如 Bcrypt,这种方式更为推荐,因为它在抵御暴力破解攻击方面表现更佳。

SHA-256 + Salt:

String password = "123456";
String salt = "1abd1c";
// 创建SHA-256摘要对象
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update((password + salt).getBytes());
// 计算哈希值
byte[] result = messageDigest.digest();
// 将哈希值转换为十六进制字符串
String hexString = new HexBinaryAdapter().marshal(result);
System.out.println("Original String: " + password);
System.out.println("SHA-256 Hash: " + hexString.toLowerCase());

输出:

Original String: 123456
SHA-256 Hash: 424026bb6e21ba5cda976caed81d15a3be7b1b2accabb79878758289df98cbec

图片

Java 应用程序的安全框架 Spring Security 支持多种密码编码器,其中 BCryptPasswordEncoder 是官方推荐的一种,它使用 BCrypt 算法对用户的密码进行加密存储。

@Bean
public PasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
}

作为开发者和企业,必须采用正确的密码存储方法,确保用户数据的安全,保护用户隐私,避免类似的安全风险和法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值