Grails 简单的groovy操作符问题:Math.min(params.max?params.int(';max';):10100)

Grails 简单的groovy操作符问题:Math.min(params.max?params.int(';max';):10100),grails,groovy,Grails,Groovy,你能告诉我这个表达方式吗 Math.min(params.max ? params.int('max') : 10, 100) 工作?它不适合groovy三元if,那么这是什么特殊运算符呢 谢谢也许把它分成两个表达式会有帮助params.max?params.int('max'):10是三元表达式…其结果是Math.min的第一个参数(其中100是另一个参数) 看起来最终结果是一个最大为100的整数,默认为10。现在清楚了吗 def max = params.max? params.int('

你能告诉我这个表达方式吗

Math.min(params.max ? params.int('max') : 10, 100)
工作?它不适合groovy三元if,那么这是什么特殊运算符呢


谢谢

也许把它分成两个表达式会有帮助<代码>params.max?params.int('max'):10是三元表达式…其结果是
Math.min
的第一个参数(其中
100
是另一个参数)

看起来最终结果是一个最大为100的整数,默认为10。

现在清楚了吗

def max = params.max? params.int('max') : 10
Math.min(max, 100)

顺便说一句,这是Grails中流行的一个很好的习惯用法-如果参数
max
存在,请读取它,但如果它超过给定值(
100
,默认情况下),请将其截断为
100
。这样,攻击者或恶意用户就不会让您的应用程序从数据库返回任意数量的数据。

在防范攻击时,您可能还需要查看底部边界。我在Grails2.4.4中遇到了这个问题:任何小于1的值都会返回所有记录。它没有文档记录,源代码似乎检查值>-1,但我发现我必须检查值>0:

 //Use value, if found, else 20
 int max = params.getInt('max') ?: 20

 //no less than 1, no more than 100: max < 1 returns ALL records (grails 2.4.4)
 max = Math.max(max, 1)
 max = Math.min(max, 100)

 Domain.list(max: max)
//如果找到,则使用值,否则为20
int max=params.getInt('max')?:20
//不小于1,不大于100:max<1返回所有记录(grails 2.4.4)
max=Math.max(max,1)
最大值=数学最小值(最大值,100)
域列表(最大值:max)

我明白了,感谢您澄清了限制此漏洞对站点攻击者的价值。