python - 保护 Flask 上的 POST 请求

标签 python python-3.x security flask flask-sqlalchemy

我构建了一个简单的 Flask 应用程序,它接收 POST 请求并在接收到请求后执行一些操作。这是我的简单代码:

@app.route('/<user>/', methods=['POST'])
def Receiver(user):
    Query = User.query.filter_by(token=user)
    Content = request.data.decode('UTF-8')
    Data = {'Content': Content, 'Username': Query.Username, 'UserID': Query.UserID}
    return jsonify(Data)

我想让这段代码尽可能安全,但我才刚刚开始使用 Flask 和一般的安全性。我可以使用此代码运行哪些危险?我正在使用变量 user 对我的数据库进行查询,例如,如果将该变量设置为 SQL 查询是否有害?在这种情况下,我还应该考虑哪些其他威胁?

最佳答案

以下是我对您的问题的一些看法:

  1. 为什么这是 POST 请求而不是 GET 请求? POST requests are meant to change data , GET 用于查询。
  2. 您不验证输入数据。会发生什么,如果用户发送给你,例如一个 100kB 长的用户名?数据库将如何处理它?会对性能有影响吗?它会允许对服务器/数据库进行 DOS 攻击吗?
  3. 是的,还有 SQL 注入(inject)。关系数据库无处不在。
  4. 如果用户 ID 不存在怎么办?我们不应该返回 404 吗?
  5. 什么是真正的安全?什么是安全?这两个术语不可互换。安全是指代码不会危害世界。安全是指世界不损害代码。
  6. 需要考虑的因素有很多种,它们可能会影响您的代码安全性(意味着提供代码接触的数据的 secret 性、完整性和可访问性),这些因素与您的代码无关,例如:通信 channel 保护、服务器配置错误、DDOS攻击...即使您的代码是完美的,持有它的系统可能仍然不安全。

关于python - 保护 Flask 上的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63041009/

相关文章:

python - 将数据帧列值转换为列名称并显示计数

python-3.x - 在 Python 3 上使用 with 打开文件有什么好处?

python - 异步服务调用 Python

python - 安装http-request-randomizer会导致安装错误

android - 可信执行环境(TEE)中的客户端应用程序和可信应用程序

python - QTableView 中的虚拟列?

python - 无需 for 即可读取 csv 文件

python - 为什么这个高阶函数不通过 mypy 中的静态类型检查?

security - plsql - 从另一个模式调用过程

security - HTTP页面中的HTTPS iframe,我该如何阻止它?