0

我是python新手,刚开始学习,我想创建一个简单的脚本来通过验证用户身份来运行程序,无论是否有效......主要问题,我面临的是我有一个文件“用户”,我在其中提到所有有效用户,所以我需要一个程序来搜索用户在“用户”文件中给出的输入,如果找到则继续,否则“身份验证失败”我尝试的是......

fp = open("用户", "r")

对于 fp.readlines() 中的行:

 if "michel" in line :  # user michel is available in users file
    print "true"
 else :
    print "false"

它有效,打印“真”,因为米歇尔在文件中..但如果用户输入“麦克风”..也会打印真......那么解决方案是什么......

4

2 回答 2

1

对于初学者来说,出于安全考虑,最好使用 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")

现在和将来增加安全性的一些建议:

  1. 修改您的“用户”文件以包含由分隔符包围的名称,例如“:jonesj:”而不是“jonesj”,并":" + username + ":" in line在用户“jones”当前登录且用户名“jonesj”的情况下搜索将避免误报的名称在您的“用户”文件中,但“jones”不在,并且您错误地将“jones”标识为授权用户(因为“jones”是字符串“jonesj”的子集)。
  2. 确保“用户”文件的权限设置为只读,这样用户就无法将他们的用户名添加到文件中以授予自己权限。
  3. 将来的某个时候,您可能需要考虑使用 LDAP 或 Kerberos 服务器或其他一些更正式的身份验证机制,而不是“用户”文件。对于相当多的身份验证后端服务器,有很好的 python 客户端库。
于 2013-07-13T16:22:26.533 回答
0

您可以使用 re 确保整行匹配:

import re

    fp = open("users", "r")
    for line in fp.readlines():
        if re.match('^michel$', line, re.I):
            print "true"
        else :
            print "false"
于 2013-07-13T16:26:49.410 回答