gpt4 book ai didi

python - 在 Python 客户端程序中保护 MySQL 登录数据

转载 作者:行者123 更新时间:2023-11-30 22:52:28 25 4
gpt4 key购买 nike

我有一个 Python 客户端程序(它将供有限数量的用户使用)使用 pymysql-Module 从远程 MySQL-DB 获取数据。

问题是数据库的登录数据对于查看代码的每个人都是可见的,因此每个人都可以操作或删除数据库中的数据。即使我将登录数据存储在加密文件中,有些人仍然可以编辑代码并插入他们自己的 MySql 查询(并再次操作或删除数据)。

那么我怎样才能从我的程序访问数据库并仍然选择、删除或更新其中的数据,但要确保没有人可以执行他自己的(邪恶的)SQL 代码(除了使用 GUI 触发的那些)?

最佳答案

您可以通过参数化参数来防止注入(inject),例如:

"SELECT * FROM Users WHERE name=\"".name."\";"

会读

SELECT * FROM Users WHERE name="AlecTeal";

但是被“注入(inject)”了:

name="\" or UserType=\"Admin"

然后它会读取

SELECT * FROM Users WHERE name="" or UserType="Admin";

这很糟糕,您可以通过以下方式防止这种情况:

SELECT * FROM Users WHERE name=?

并绑定(bind)您的变量,然后 SQL 服务器实际上不会解析来自用户的任何数据,它会看到 ? 并只是从参数中读取。

您不能自己隐藏 SQL 语句

您当然可以隐藏它们,但它们会在您的 .pyo 或 .py 代码中的某处!

你有两个选择:

MySQL 支持用户 - 这就是用户的目的,并假设“只有相当值得信赖的人才能获得我的程序”,因此您可以拥有像 Debbie_From_Accounts 这样的用户,他可以从 Userstable,并从 Financial` Tables say 中更新/删除/插入/选择。

或者!

您可以在服务器上使用某种 API,并拥有一组执行数据库工作的 PHP 脚本,您只需通过 http 获取页面。

关于python - 在 Python 客户端程序中保护 MySQL 登录数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27743031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com