Ale*_*one 5 python security authentication web-services flask
我有一个客户端应用程序,它与Web服务交互以检索帐户信息.如果用户输错了用户名/密码,则需要通知用户.我正在修改Web服务以向我的客户端返回一些内容,以向用户提示输入中存在错误.
如何正确实现使用Python找不到的Web服务的"用户名/密码"?
到目前为止这是我的代码:
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
您没有提及您正在提供什么样的数据,但如果您正在处理财务或医疗保健数据:使用户要么可以登录,要么不能登录,您不应该试图向他们提供任何信息,因为为什么。
如果您愿意,您可以告诉他们用户名不正确,但您不能建议其他用户名。当然,您不能提供任何有关密码可能有问题的信息,只需告诉他们密码不正确即可。
关于您提供的代码,我意识到您并没有真正寻求编码建议,不过,我仍然进行了大量的代码审查,并且在这些自行设计的身份验证方案中不断地看到相同的问题。如果您的代码经过审核,审核员可能会发现以下问题:
您绝不能对密码进行硬编码。
您绝不能以明文形式保留密码,在收到密码时始终使用不可逆哈希(SHA-1 或更高版本)并且仅使用哈希值
您的应用程序应该“失败关闭”,这意味着将 accountList() 函数设置为在 if 语句之前以及调用任何会引发异常的函数(例如数据库访问)之前返回“未授权”。在 if 语句中进行身份验证检查。这样,如果 if 语句调用的内容出现故障(例如数据访问或文件 I/O 中的异常),用户将无法登录。