用Python清理用户提供的SQL?

4 投票
4 回答
18534 浏览
提问于 2025-04-15 17:36

我正在开发一个小应用,目的是帮助浏览由 vim-logging 生成的数据。我想让用户能够对这些数据集执行任意的SQL查询。

我该如何安全地实现这个功能呢?

举个例子,我希望用户能够输入类似于 SELECT file_type, count(*) FROM commands GROUP BY file_type 的查询,然后把结果发送回他们的网页浏览器。

4 个回答

3

让用户能够灵活使用数据库的同时又不让他们破坏数据,这是一项很难的工作。如果你允许他们自己输入“SELECT ..”这样的指令,就必须防止他们输入“DELETE ..”这样的指令。你可以要求他们的指令必须以“SELECT”开头,但这还不够,因为你还得确保指令中间没有出现“; DELETE”这样的内容。

最安全的做法可能是用只读的用户权限来连接数据库。

4

在MySQL中,你可以创建一个有限权限的用户(也就是新建一个用户,并给他一些有限的访问权限),这个用户只能访问特定的表。

7

这样做:

cmd = "update people set name=%s where id=%s"
curs.execute(cmd, (name, id))

请注意,占位符的写法取决于你使用的数据库。

更多信息和来源请查看这里:

http://bobby-tables.com/python.html

撰写回答