sql - 过滤 SQL 查询字符串以禁止写入
问题描述
我有一个 Pervasive SQL 12 数据库,我需要从某个应用程序中读取它,但绝不应该写入。我使用一个 PHP PDO 包装函数来处理参数化并设置我经常使用的各种选项。我通过 Windows ODBC 64 位驱动程序连接,使用带有“?”的正确参数化查询 占位符。32 位 ODBC 驱动程序允许只读连接,但 64 位不允许。
我的问题是:有没有办法过滤查询字符串本身以只允许“读取”(SELECT)查询?
在最基本的情况下,我可以使用 PHP 来确保查询以单词“SELECT”开头,并且不包含任何分号(这可能表示中断和第二个查询的开始)。
还有什么我应该寻找的吗?是否可以在 SQL 中执行具有 UPDATE/DELETE/INSERT 作为子查询的 SELECT 查询?或者类似的怪事可以绕过这种类型的过滤器?
我真的不希望有一个积极的恶意用户,就像我试图防止意外/粗心地使用修改查询一样。