security - 在 Groovy 动态 SQL 中检测 SQL 注入(inject)

如何检测具有动态原生 SQL 的 Grails 应用程序中的 SQL 注入(inject)漏洞?

我正在寻找的是可以区分这之间的区别的东西

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 有一条规则,比如“准备好的语句是从非常量字符串生成的”,但这不会区分安全语句和危险语句。还有哪些其他选择?

最佳答案

使用 Static Analysis 怎么样?工具如 "Find Security Bugs" .

See here对于与 Groovy 兼容的其他人。

https://stackoverflow.com/questions/29946464/

相关文章:

git - 如何在GitBlit中禁用SSH并仅使用HTTP和HTTPS

php - 设备的 ioctl 不合适

ssh - 将现有的 ssh_authorized_keys 导入 puppet 资源

grails - 验证标准无法使用

grails - 路由到webapp文件夹时,将默认渲染文件设置为grails 3中的index.h

ssh - docker run找不到名称标志参数

json - JSON获取全数字

php - PHP Net_SSH2-exec()如何获取命令返回码

amazon-web-services - AWS EC2 - 为什么连接时我的 SSH 公钥不存在

ssh - 如何找到在amazon-ec2中启动的实例的用户名?