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

2024-09-30 20:38:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

成功身份验证后,一个名为self.authenticatedUser的变量保存一个类User的SQLAlchemy实例。在

这种实现的结果是,任何人都可以编辑login方法,使用username admin直接查询数据库中的User类型的对象,并将返回的User的SQLAlchemy实例分配给self.authenticatedUser,这样黑客就可以访问系统了。在

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

有没有什么具体的方法可以更安全地实现这一点?在

  1. 使用mysqla本地数据库
  2. 使用一个安全的(相对难以逆向工程的)机制。在

Tags: 实例方法用户self身份验证web数据库应用程序
3条回答

每件事都只是一个代码逆向工程有多难的问题,所以这里有一些技术来“保护”它。在

  • 将应用程序预编译为字节码(但是有一些工具可以像uncompyle6)那样反编译它
  • 对你的代码使用一些模糊处理,这样它就很难阅读(比如pyminifier
  • 加密应用程序(例如pyconcrete
  • 使用用户密码动态加密应用程序本身的重要部分。有了密码,黑客可以重新创建未加密的应用程序,但没有密码,这是不可能的。在

即使存在气隙,也可以进行维修。但是,如果您不想这样做,您应该保护您的数据,就像您为每个用户提供了一个propper SQL客户机(如pgAdmin或sqlservermanagementstudio)。我建议您开始在数据库级别配置角色/用户。在

因为bcrypt不再被采用,而且您可以很容易地使用SHA2x,我认为您需要考虑使用SHA2x来保证安全性原因。其次,您可以使用JWT,因为它100%地与python一起工作。另外,还要深入了解2因素身份验证,这将是您的安全检查的另一个优点。在

相关问题 更多 >