Skip to content

读者记录密码安全策略

Hopeshine edited this page Jan 22, 2021 · 5 revisions

dp2 系统的读者记录,是一种 XML 格式的记录,每条记录存储了关于一个读者的各种信息。

读者记录根元素下的 password 元素存储了读者的密码。这个密码被用于读者登录 dp2OPAC,或者使用内务前端(没错,读者也可以用内务前端进行一些操作)。

为了安全考虑,password 元素中存储的是 Hash 以后的密码字符串,不是明码。在 dp2library 验证密码的时候,实际上是用前端发来的密码明码,Hash 运算以后,和读者记录中的 password 元素内容进行比较来判断密码是否匹配的。

除了专门修改读者记录密码的 API(changeReaderPassword()),一般修改读者记录的 API 是不会修改 password 元素的。或者说,前端即便发来包含了 password 元素的读者记录,dp2library 在真正保存到数据库以前,是要对前端发来的 password 元素进行过滤的。

当读者记录被创建的时候,如果(前端发来的) dateOfBirth 元素中包含了正确的出生日期信息,那么 dp2library 会自动将出生日期的 8 位数字形态(例如 20160101)用于初始的 password 元素内容,即,出生日期被当作了初始密码。

如果读者记录被创建时没有包含 dateOfBirth 元素,那么 dp2library 会自动发生一个随机的字符串作为 password 元素内容,那么可以想到,读者肯定是不知道这个密码的,他/她只能去图书馆柜台请图书馆工作人员重设一下密码了。

(如果图书馆加入了“我爱图书馆”微信公众号,如果读者记录中有 tel 元素,元素内容是读者的手机号,那么读者任何时候都可以用微信公众号的找回密码功能得到一个临时密码(通过手机短信)。读者只要用这个临时密码登录过一次,这个临时密码就自动转为正式密码了。)

如果创建读者记录的时候,前端给出的 dataOfBirth 元素内容不合法,则这个个创建记录的操作会报错,读者记录不会被创建。

如果创建读者记录的时候,前端并没有给出 dateOfBirth 元素,那么读者记录就被创建为具有一个随机字符串的密码;即便后面再修改这条读者记录并且修改的读者记录中包含了合规的 dateOfBirth 元素,dp2library 也不会自动修改 password 元素了。这时只有用专门修改读者密码的功能去给读者设定密码了。

Clone this wiki locally