在我的团队正在开发的应用程序中,所有用户都可以定义基于SQL的过滤器,这些过滤器是返回ID的SQL-select语句。
然后,用户输入的此语句将作为子选择子句嵌入insert ... select ..
语句中。
我对此有一种非常糟糕的感觉,我认为这是一个严重的安全问题,因为用户可能会找到一种方法来执行危险的abitrary SQL命令,如delete from...
。
限制或删除此功能肯定会违背客户意愿。因此,我希望有一个概念验证来说明问题。
因此我的问题:
是否可以执行一些使用subselect子句修改数据或模式修改的非常危险的语句?
答案 0 :(得分:2)
没有。那是不可能的。但是,也许他们可以输入两个语句,这些语句在彼此之后执行。如果第一部分是无害选择,他们可以结束它(使用分号),并添加另一个有害的声明。这是否会起作用取决于该语句的执行方式,但请确保测试这种情况。
更好的是,让一个没有权限执行dml语句的用户,甚至是ddl语句,除了插入那个表。让功能通过该用户帐户连接。这样,除了充斥桌子之外,他们永远不可能写出做有害事情的陈述。
使用resource manager,您甚至可以确保此用户不会对数据库造成非常高的负载。
答案 1 :(得分:0)
是否可以执行一些非常危险的修改语句 使用subselect子句修改数据或模式?
简答:是的!
请阅读这些文章,并将其呈现给您的客户"。向他们表明,通过这样做,系统将更加脆弱,并且可以被利用。
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