防止在线 SQL 查询的 SQL 注入

Preventing SQL Injection for online SQL querying

我有一个小型 Python 项目站点,访问者可以在其中练习编写 SQL 代码。此代码实际上 运行s 和 returns 值。我知道我需要防止 SQL 注入,但我不确定最好的方法,因为该站点的目的是用户应该能够针对真实数据库编写和执行任意 SQL 代码.

我应该怎么做才能防止恶意行为?我想阻止诸如 DROP xyz; 之类的语句,但用户应该仍然能够执行代码。我认为也许理想的解决方案是用户只能 "read" 来自数据库,即。他们只能 运行 SELECT 语句(或变体)。但我不确定 "read only" 是否捕获了所有恶意行为的边缘情况。

任何想法或建议都会有所帮助

对于将 SQL 语句作为用户输入并 运行 逐字输入的站点,无法阻止 SQL 注入。该站点的目的 是SQL 注入。防止 SQL 注入的唯一方法是不开发此站点。

如果您开发网站,如何防止恶意SQL?答:不要让恶意用户访问本网站。只允许受信任的用户使用它。

好的,我假设您确实想要开发该站点并且您确实希望允许所有用户,而不需要做很多工作来筛选他们。

然后它就变成了限制他们可以造成的潜在损害的任务。仔细限制他们的权限,使他们只能在特定模式中创建对象和 运行 查询。

或者更好的是,为每个人启动一个 Docker 容器以拥有自己的私有数据库实例,并限制容器可以使用的 CPU 和内存。