方法一:

将用户的认证信息保证在一个cookie中,具体如下:
1.cookie名:uid。推荐进行加密,比如MD5(‘站点名称’)等。
2.cookie值:登录名|有效时间Expires|hash值。hash值可以由”登录名+有效时间Expires+用户密码(加密后的)的前几位 +salt”,salt是保证在服务器端站点配置文件中的随机数。
这样子设计有以下几个优点:
1.即使数据库被盗了,盗用者还是无法登录到系统,因为组成cookie值的salt是保证在服务器站点配置文件中而非数据 库。
2.如果账户被盗了,用户修改密码,可以使盗用者的cookie值无效。
3.如果服务器端的数据库被盗了,通过修改salt值可以使所有用户的cookie值无效,迫使用户重新登录系统。
4.有效时间Expires可以设置为当前时间+过去时间(比如2天),这样可以保证每次登录的cookie值都不一样,防止盗用者 窥探到自己的cookie值后作为后门,长期登录。

方法二:

每个用户登录之后生成一个随机的GUID,然后把GUID存在数据库里面(也可以考虑使用Redis,把用户信息和随机 GUID以KEY-VALUE方式存储 GUID-用户信息,存储时设置超时时间,比如20分钟,每次验证用户信息都自动延长20分 钟。如果用户选择记住登录,则设置时间为30天)。安全要求高的话,每次重新登录(包括用用户名密码和使用GUID)都 重新生成GUID,旧的作废,这样在新的地方登录之后旧的记住登录就自动失效。安全要求低的话可以每次都返回相同 的,直到用户修改密码之后让旧的GUID作废。用户Cookies里面没有直接和用户名、密码有关的内容,即使Cookies被盗 了也没法修改密码,原用户发现账号异常之后只要修改密码就可以防止盗号了。

另:防止XSS攻击,可以将Http-Only设置为True。

作者 铁血 汉子 2017年4月24日
2024/03/28/09:38:05pm 2017/4/24/11:30:23
0 4011