【发布时间】:2015-07-08 21:36:14
【问题描述】:
如何使用动态原生 SQL 检测 Grails 应用程序中的 SQL 注入漏洞?
我正在寻找能够区分这两者的东西
def sql = new Sql(dataSource)
def dynamicWhereClause = ""
if (params.col) {
dynamicWhereClause = " and col = :col"
}
// OK because dynamic SQL does not concatenate user input
def sqlString = "select * from tab where ... ${dynamicWhereClause}"
sql.rows(sqlString, params)
还有这个
def sql = new Sql(dataSource)
def dynamicWhereClause = ""
if (params.col) {
// NOT OK - directly concatenating user input
dynamicWhereClause = " and col = '" + params.col + "'"
}
def sqlString = "select * from tab where ... ${dynamicWhereClause}"
sql.rows(sqlString)
Sonarqube/Findbugs 有一条规则,例如“准备好的语句是从非常量字符串生成的”,但它不会区分安全语句和危险语句。还有哪些其他选择?
【问题讨论】:
-
也许是代码审查?
-
是的,代码审查和培训是我们目前的主要防御措施,我正在寻找一种支持,以在出现问题时提供一些保证。
标签: security grails groovy sql-injection