我有一个Python客户端程序(仅对有限数量的用户可用),可以使用pymysql-Module从远程MySQL-DB中获取数据。
问题在于,查看代码的每个人都可以看到数据库的登录数据,因此每个人都可以操纵或删除数据库中的数据。即使我将登录数据存储在加密文件中,也有些人仍然可以编辑代码并插入自己的MySql查询(然后再次操作或删除数据)。
那么,如何才能从程序访问DB并仍然在其中进行SELECT,DELETE或UPDATE数据,但是要确保没有人可以执行自己的(无效的)SQL代码(使用GUI触发的代码除外)?
您可以仅通过参数化参数来防止注入,例如:
"SELECT * FROM Users WHERE name=\"".name."\";"
会读
SELECT * FROM Users WHERE name="AlecTeal";
但是可以被“注入”:
name="\" or UserType=\"Admin"
然后它将读取
SELECT * FROM Users WHERE name="" or UserType="Admin";
不好,您可以使用以下方法防止这种情况:
SELECT * FROM Users WHERE name=?
并绑定您的变量,则SQL Server实际上不会解析用户的任何数据,而是会看到?
和只是从参数中读取数据。
您不能自己隐藏SQL语句
您可以确定它们是否模糊,但是它们将出现在您的.pyo或.py代码中!
您有两种选择:
MySQL支持用户-这就是用户的宗旨,并假设“只有相当值得信赖的人才能获得我的程序”,因此您可以拥有一个像Debbie_From_Accounts" who can select from the
Users table, and update/delete/insert/select from
Financial` Tables这样的用户。
或者!
您可以在服务器上使用某种API,并且拥有一组可以完成数据库工作的PHP脚本,而您只需http就可以获取页面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句