首页 > 解决方案 > Heroku 上托管的简单烧瓶应用程序的身份验证

问题描述

我正在尝试创建一个简单的网络应用程序供企业使用。我没有创建单独的身份验证方法,而是使用 Requests 库将凭据输入发送到我的公司网站的 html 表单,并检查请求状态代码是否为 200。

问题 1:与建立单独的身份验证(例如 Flask-Login)相比,这是一种安全的方法吗?正如我从一些阅读中了解到的,通常的做法是获取密码的哈希值并将其与数据库中现有条目的哈希值进行比较。

先感谢您。

from flask import Flask, make_response, request, render_template, url_for
from flask_bootstrap import Bootstrap
import requests
from requests.auth import HTTPBasicAuth

app = Flask(__name__)
bootstrap = Bootstrap(app)    

@app.route('/', methods=["GET", "POST"])
    def login():
      if request.method == 'GET':
        return render_template('log.html')
      elif request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        r = requests.get('MY COMPANY WEBSITE', auth=HTTPBasicAuth(username, password))
        if r.status_code == '200':
          return redirect(url_for('index'))
        elif r.status_code != '200':
          print(r)
          return render_template('login_fail.html', username=username,password=password)

标签: pythonherokuflaskpython-requestsflask-login

解决方案


恐怕这是一种非常糟糕的用户身份验证方式。

这种方法没有任何安全性,并且会给系统带来很多漏洞。

此外,您必须为每个请求编写此逻辑,使其变得繁琐并减慢整个事情的速度(即使它不是很多)。

您可以使用以下几种方法: 1. 使用算法创建身份验证令牌,并在请求-请求的基础上继续传递该令牌。这里的基本前提是 auth 令牌就像一把钥匙,它由前端来确保钥匙保存在安全的地方。当您编写第三方可以使用并需要 API 级别访问的服务时,身份验证令牌是最好的情况 2. 使用 Flask-login 并使用 Flask 的 userloader 功能在用户登录时对其进行身份验证。请记住在您的服务器上散列密码。这增加了服务器的安全配置文件 3. 在烧瓶登录中使用 requestloader。这类似于(1),您不必做很多繁重的工作

希望这可以帮助


推荐阅读