如果我有一个有效的sql字符串;无论如何我可以在我的PL / sql中执行它 – 但保证它只是一个SELECT语句…没有进行复杂的解析以确保它没有任何转义字符/嵌套命令或任何爵士乐?
编辑:
我真正想要实现的是一个通用的,内置于我的应用程序,查询工具.它具有友好的,特定于域的GUI,并允许非技术用户创建相当复杂的查询.该工具处理搜索的版本控制,在需要的地方添加内部连接,以及一些其他特定于应用程序的东西,您将找不到典型的sql DEV类型工具.
应用程序成功创建SQL查询.问题是我还允许用户直接输入自己的sql.我担心潜在的sql注入类型问题.
我不确定这是不是合适的地方;但是,除了这个问题 – 如果有人能推荐一本能让我加快这种性质的甲骨文的好书 – 我非常感激.
解决方法
一种解决方案是只授予用户SELECT权限,如果这是用户被授权的唯一权限.
见“Oracle Database Security Guide: Introduction to Privileges”
但是,我认为您的应用程序不一定是安全的,因为您将查询限制为SELECT.当您允许不安全地使用SELECT查询时,可能存在恶作剧的示例.
你澄清的问题:我已经研究过sql注入并写了很多.我可以建议的一般规则是:永远不要将用户输入作为代码执行.这就是sql注入的方式.
您可以设计特定于域的语言并将用户输入映射到sql操作,但要确保有一个层将用户选择转换为数据库模式.如果通过引入映射层将用户输入与sql代码分开,那么您应该没问题.