【辅导】Task19 实现用户登录 主要知识点
本任务除介绍使用数据库表来验证用户名密码是否正确以应用于登录界面设计外,其余内容实际上对本文课程的一个综合应用,构建一个简单的信息管理系统(Sakila信息系统中的客户管理),并以此作为课程实训的一个参考案例。
1、为什么用户的登录密码必须加密存储?
《网络安全法》规定,网络运营者必须履行网络安全等级保护等义务,《信息安全技术网络安全等级保护基本要求》(等保2.0)要求进行身份鉴别时,应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别。
2011年CSDN就发生过600万用户密码泄露,之后又发生多起密码泄露事件,2019年又爆Facebook上亿用户密码泄露。由于用户在多个平台用户注册的账号可能会使用同一密码,给用户造成的损失不可估量。密码加密存储、使用复杂密码、定期更换密码是保护账户安全的重要措施。网络运营者不按网络安全法要求保护用户数据,最高可入刑。近2年网安部门处罚多起网络安全事件,单位及法人代表受警告及罚款。
2、哈希算法的原理
对登录密码进行加密,多采用哈希算法。哈希算法是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M)。是一种单项密码机制,具有易压缩、易计算、单向性、抗碰撞、高灵敏性。
哈希算法可以检验传输的信息是否相同,检验信息的拥有者是否真实。
理论上哈希算法不能被破解,黑客基本上使用暴力破解或表格破解。只要密码够长够复杂,基本上难以破解。你的密码之所以被盗,基本上是属于:密码太简单+多网站使用相同密码。
常用的哈希算法使用MD5和SHA。MD5+SALT(加盐)、SHA1对大部分中小型网站来说足够安全,一些网站还会使用SHA-256、SHA-512、bcrypt等安全性更高的加密方式。
3、登录认证过程
Task13中已经介绍了登录认证的过程,就是验证用户输入用户名或密码正确时,记录一个SESSION。
案例中使用User类的login函数验证用户名和密码是否正确,将User类对象存储到SESSION中。
注意,登录时不要特意告诉用户是用户名输入错了,还是密码输入错了。这样做是方便了黑客更容易破解。一些网站还设置成登录错误若干次后,一段时间内不允许再登录,或者出现验证码输入框,主要是防止机器人自动尝试登录。
4、每个需授权访问的管理页面,都需验证用户是否经过登录认证。
验证用户是否经过登录认证,就是判断登录时保存的SESSION是否存在。为避免伪登录,这个SESSION名字可以起得复杂一些。重要的操作还可以使用二次登录。
5、提供注销(退出)功能
退出时,要删除掉登录时保存的SESSION,或者销毁当前用户SESSION。这个知识在Task13辅导时讲过的。删除SESSION时要转向至登录页面。
6、课后练习
有条件的同学,请务必参照课件和视频,在Task18的基础上,加入登录和身份认证功能。
7、后续教学安排
课程教学基本到Task19就结束了。
下周三进行第3次测试,内容是Task16-19的内容。
下周四把实训任务布置一下。
按原定的教学计划安排,第16周考试,第19-20周是实训周。现在这些要等学校的具体的安排了。