用Python清理用户提供的SQL?
我正在开发一个小应用,目的是帮助浏览由 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))
请注意,占位符的写法取决于你使用的数据库。
更多信息和来源请查看这里: