关于postgresql:在Python中过滤恶意注入的SQL语句

Filter SQL statement against malicious injection in Python

希望允许客户端应用程序对我们的数据库执行SQL查询。

查询将是对数据的请求,客户端永远不能修改数据。

有没有办法允许客户端发送SQL语句,然后筛选它以进行恶意注入,然后将其传递通过数据库?

我们在PostgreSQL数据库中使用Python的SQLAlchemy库。

谢谢!


比试图解释恶意查询更容易的选择是创建具有只读权限的db用户。然后,您的最终用户将使用该帐户运行SELECT查询。您不必担心恶意插入和删除,因为不允许"写入"查询。您还可以进一步修改权限,以禁止访问您不希望客户看到的数据等。

有关创建"只读"用户的一些信息,请参阅此问题和答案。


使用sqlalchemy.sql.expression.text方法执行sql查询时使用prepared语句

1
2
3
4
from sqlalchemy.sql.expression import text

t = text("SELECT * FROM users WHERE id=:user_id")
result = connection.execute(t, user_id=12)

有关text方法的完整报道,请参阅sqlalchemy文档。

但是,即使DBA块从用户创建和编写角色,保护您的应用程序免受用户定义的sql语句也很困难。
考虑在开始之前阅读这篇博文。


您始终可以使用从属模式中仅接受读取连接的第二个数据库来改进您的安全系统。

https://www.postgresql.org/docs/9.2/static/high-availability.html

此策略允许您在读取模式下扩展数据库两次,三次或四次。