嵌入DML / DDL作为子查询?

时间:2015-02-13 19:19:46

标签: sql oracle security sql-injection

在我的团队正在开发的应用程序中,所有用户都可以定义基于SQL的过滤器,这些过滤器是返回ID的SQL-select语句。 然后,用户输入的此语句将作为子选择子句嵌入insert ... select ..语句中。

我对此有一种非常糟糕的感觉,我认为这是一个严重的安全问题,因为用户可能会找到一种方法来执行危险的abitrary SQL命令,如delete from...

限制或删除此功能肯定会违背客户意愿。因此,我希望有一个概念验证来说明问题。

因此我的问题:
是否可以执行一些使用subselect子句修改数据或模式修改的非常危险的语句?

2 个答案:

答案 0 :(得分:2)

没有。那是不可能的。但是,也许他们可以输入两个语句,这些语句在彼此之后执行。如果第一部分是无害选择,他们可以结束它(使用分号),并添加另一个有害的声明。这是否会起作用取决于该语句的执行方式,但请确保测试这种情况。

更好的是,让一个没有权限执行dml语句的用户,甚至是ddl语句,除了插入那个表。让功能通过该用户帐户连接。这样,除了充斥桌子之外,他们永远不可能写出做有害事情的陈述。

使用resource manager,您甚至可以确保此用户不会对数据库造成非常高的负载。

答案 1 :(得分:0)

  

是否可以执行一些非常危险的修改语句   使用subselect子句修改数据或模式?

简答:是的!

例如: http://xkcd.com/327/

请阅读这些文章,并将其呈现给您的客户"。向他们表明,通过这样做,系统将更加脆弱,并且可以被利用。

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:23863706595353

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:31670728929866

http://www.securiteam.com/securityreviews/5DP0N1P76E.html

http://tkyte.blogspot.fi/2012/02/all-about-security-sql-injection.html