在Python PyQt桌面应用程序中安全地验证和授权用户

时间:2017-10-13 09:20:59

标签: python security authentication sqlalchemy desktop-application

我开发的应用程序规定软件应该防止未经授权的访问。为了实现这一点,我使用了基于用户和密码的身份验证,并提供了两个角色 - 标准用户和管理员。

这完全在Python中实现,使用SQLAlchemy与数据库交互,PyQt用于用户界面。

使用brcypt对输入的密码进行哈希处理,然后将数据库中存在的哈希值与相应的用户名(Web服务中使用的标准身份验证技术)进行比较。

成功验证后,名为self.authenticatedUser的变量包含类User的SQLAlchemy实例。

此实现的结果是,任何人都可以编辑login方法,直接在数据库中查询具有用户名admin的User类型的对象,并将返回的User的SQLAlchemy实例分配给{{ 1}}和bingo黑客可以访问系统。

因为,我正在分发用python编写的这个软件,黑客(或任何类型的程序员)禁用身份验证机制只需几分钟。此外,我不能在此处使用Web服务通过获取登录登录令牌进行身份验证或授权,因为该软件将在air gap的环境中使用。

有没有具体的方法以更安全的方式实现这一点?

  1. 使用本地MySQL数据库
  2. 使用安全(相对难以逆向工程可能是合适的)机制。

3 个答案:

答案 0 :(得分:2)

一切只是对代码进行逆向工程的难度,所以这里有一些“保护”它的技术。

  • 将您的应用程序预编译为字节代码(但有一些工具可以像uncompyle6那样反编译它)
  • 在代码中使用一些混淆器,因此几乎无法读取(如pyminifier
  • 加密您的应用程序(例如pyconcrete
  • 使用用户密码即时加密应用程序本身的重要部分。使用密码,黑客可以重新创建未加密的应用程序,但没有它,就不可能。

答案 1 :(得分:0)

即使有气隙,也可以提供服务。但是,如果您不想这样做,您应该保护您的数据,就好像您为每个用户提供了一个适当的SQL客户端(如pgAdmin或SQL Server Management Studio)。我建议您开始在数据库级别配置角色/用户。

答案 2 :(得分:0)

由于不再采用bcrypt,您可以轻松使用SHA2x。我认为你需要考虑使用SHA2x是出于安全考虑。其次,你可以使用JWT,因为它与python一起工作100%。还要深入了解2因素身份验证,这将是您的安全检查的另一个优势。