如何使用Flask HTTP Auth为Web服务实现"不正确的用户名/密码"提示?

Ale*_*one 5 python security authentication web-services flask

我有一个客户端应用程序,它与Web服务交互以检索帐户信息.如果用户输错了用户名/密码,则需要通知用户.我正在修改Web服务以向我的客户端返回一些内容,以向用户提示输入中存在错误.

如何正确实现使用Python找不到的Web服务的"用户名/密码"?

  • 我是否告诉用户用户名存在,但密码不正确?
  • 我是否告诉用户没有这样的用户名,但密码匹配了什么?
  • 我是否显示未找到通用用户名/密码组合?
  • 我是否针对不同情况使用不同的状态代码,或者提供带有错误的JSON有效负载?

到目前为止这是我的代码:

from flask.ext.httpauth import HTTPBasicAuth

accounts = [
    ["user0",   "password0"],
    ["user1",   "password1"],

]

@app.route('/accountlist')
@auth.login_required
def accountlist()
    username  = auth.username();
    if ... : #check if accounts does not have the given username
        #notify the sender that there is no such username
        return Response('Not Authorized', 401, {'WWW-Authenticate': 'Basic'})
    else:
        #proceed to check password and retrieve/return account information
Run Code Online (Sandbox Code Playgroud)

小智 0

您没有提及您正在提供什么样的数据,但如果您正在处理财务或医疗保健数据:使用户要么可以登录,要么不能登录,您不应该试图向他们提供任何信息,因为为什么。

如果您愿意,您可以告诉他们用户名不正确,但您不能建议其他用户名。当然,您不能提供任何有关密码可能有问题的信息,只需告诉他们密码不正确即可。

关于您提供的代码,我意识到您并没有真正寻求编码建议,不过,我仍然进行了大量的代码审查,并且在这些自行设计的身份验证方案中不断地看到相同的问题。如果您的代码经过审核,审核员可能会发现以下问题:

  1. 您绝不能对密码进行硬编码。

  2. 您绝不能以明文形式保留密码,在收到密码时始终使用不可逆哈希(SHA-1 或更高版本)并且仅使用哈希值

  3. 您的应用程序应该“失败关闭”,这意味着将 accountList() 函数设置为在 if 语句之前以及调用任何会引发异常的函数(例如数据库访问)之前返回“未授权”。在 if 语句中进行身份验证检查。这样,如果 if 语句调用的内容出现故障(例如数据访问或文件 I/O 中的异常),用户将无法登录。