我在2047的开源代码中,发现有两处代码会关联用户身份和IP地址。如果我没理解错的话。
第一处的代码位置在:
https://github.com/thphd/2047/blob/master/api.py
第358行。源代码为:
aql('''for i in invitations filter i._key==@ik
update i with {active:false, ip_addr:@ip, salt:@salt} in invitations''', ik=ik, ip=g.display_ip_address, salt=salt)
数据库操作是Arango DB的查询语言。g.display_ip_address
是显示在网页右下的IP地址。我没理解错的话,这一步会将用户的IP地址和密码盐写入数据库。由于用户的盐是唯一的,知道盐就相当于知道用户身份。因此这一步相当于关联了用户IP和身份并记录。
这个GitHub版本是:
https://github.com/thphd/2047/blob/e00a6108ef1e001ca0f0f81b35f8536008f91fbb/api.py
第二处的代码位置在:
https://github.com/thphd/2047/blob/master/main.py
第897行-901行。源代码为:
# now seems you're not logged in. we have to be more strict to you
salt = g.session['salt'] if 'salt' in g.session else '==nosalt=='
if not is_static:
log_info(ipstr, 'browser' if g.using_browser else '==naked==', salt)
ipstr
就是显示在网页右下的IP地址,salt
是用户盐,可以唯一的标识用户。因此,log_info()
这个函数,对用户发起的每一次请求,都记录了发起请求的用户身份和IP地址。
这个GitHub版本是:
https://github.com/thphd/2047/blob/b8b2116c015dbb97ecec9b6ae3d2e11ed6c68f72/main.py
保存日志用于维护可以理解,但不能理解同时记录用户salt和IP有任何必要。