2017-10-13 220 views
10

我开发的应用程序规定软件应防止未经授权的访问。为了实现这一点,我使用了基于用户和密码的身份验证,并提供两种可用的角色 - 标准用户和管理员。在Python PyQt桌面应用程序中安全地认证和授权用户

这是完全用Python实现的,通过使用SQLAlchemy与数据库PyQt进行用户界面交互。

使用brcypt对输入的密码进行散列,然后将其与相应用户名(Web服务中使用的标准认证技术)的数据库中存在的散列进行比较。

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

这个实现的结果是任何人都可以编辑的登录方法简单,直接在数据库中查询User类型的对象与用户名admin和User返回SQLAlchemy的实例分配给self.authenticatedUser和宾果黑客可以访问系统。

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

是否有任何具体的方式来实现这个以一种非常安全的方式?

  1. 使用本地MySQLDatabase
  2. 使用安全(比较难于逆向工程很可能是合适的)机制。
+0

您可以考虑将[PyInstaller](http://www.pyinstaller.org/)作为操作系统二进制文件进行分发。 SQLAlchemy和PyQt位于受支持的软件包列表中。 PyInstaller甚至支持PyCrypto。 –

回答

2

一切都只是逆向工程代码的难点,所以这里有一些技术来“保护”它。

  • 预编译您的应用程序字节码(但也有工具来反编译回像uncompyle6
  • 使用一些混淆你的代码,所以它是很难读(如pyminifier
  • 加密您的应用程序(例如pyconcrete
  • 使用用户密码来即时加密应用程序本身的重要部分。使用密码,黑客可以重新创建未加密的应用程序,但没有它,这是不可能的。
0

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

0

由于bcrypt不再被采用,您可以轻松使用SHA2x。我认为你需要考虑使用SHA2x出于安全原因。其次,你可以使用JWT,因为它可以在Python中100%运行。还要深入了解2因素认证,这对您的安全检查来说是另一个加分。

相关问题