对于初学者来说,出于安全考虑,最好使用 os.getlogin() 来确定用户的登录名,而不是提示用户输入他们的用户名。这至少可以保证用户通过某种身份验证机制登录以进入系统,这意味着他们有一个已知且一致的用户名。
所以如果你想把它变成一个函数,你可以写:
def is_valid_user(username):
fp = open("users", "r")
for line in fp.readlines():
if username in line:
fp.close()
return True
fp.close()
return False
然后,您可以使用以下方法调用该函数:
import os
is_valid = is_valid_user(os.getlogin())
if is_valid:
print("valid user")
else:
print("invalid user")
现在和将来增加安全性的一些建议:
- 修改您的“用户”文件以包含由分隔符包围的名称,例如“:jonesj:”而不是“jonesj”,并
":" + username + ":" in line
在用户“jones”当前登录且用户名“jonesj”的情况下搜索将避免误报的名称在您的“用户”文件中,但“jones”不在,并且您错误地将“jones”标识为授权用户(因为“jones”是字符串“jonesj”的子集)。
- 确保“用户”文件的权限设置为只读,这样用户就无法将他们的用户名添加到文件中以授予自己权限。
- 将来的某个时候,您可能需要考虑使用 LDAP 或 Kerberos 服务器或其他一些更正式的身份验证机制,而不是“用户”文件。对于相当多的身份验证后端服务器,有很好的 python 客户端库。