gpt4 book ai didi

security - Groovy/Grails:有没有办法使.evaluate()完全安全?

转载 作者:行者123 更新时间:2023-12-02 14:04:13 25 4
gpt4 key购买 nike

我遇到一种情况,我需要确定一个对象“骑”另一个对象的资格。车辆的规则非常混乱,我希望能够在不重新启动或重新编译项目的情况下进行更改。

这有效,但基本上使我的安全 friend 感到抽搐并说方言:

class SweetRider{
String stuff
BigDecimal someNumber
BigDecimal anotherNumber
}

class SweetVehicle{
static hasMany=[constraintLinkers:VehicleConstraintLinker]
String vehicleName
Boolean canIRideIt(SweetRider checkRider){
def checkList = VehicleConstraintLinker.findAllByVehicle(this)
checkList.each{
def theClosureObject = it.closureConstraint
def iThinkINeedAShell = new GroovyShell()
def checkerThing = iThinkINeedAShell.evaluate(theClosureObject.closureText)
def result = checkerThing(checkRider)
return result
}
}
}

class VehicleConstraintLinker{
static belongsTo = [closureConstraint:ConstraintByClosure, vehicle:SweetVehicle]
}

class ConstraintByClosure{
String humanReadable
String closureText
static hasMany = [vehicleLinkers:VehicleConstraintLinker]
}

因此,如果我想添加一条规则,即当您的“东西”是“佩吉”或“华夫饼”并且您的someNumber大于您的anotherNumber时,您才有资格使用某种车辆:

使用humanReadable =“peggy waffle some#>”创建新的ConstraintByClosure(这是人类可读的解释),然后将此字符串添加为closureText
{
checkRider->if(
["peggy","waffles"].contains(checkRider.stuff) &&
checkRider.someNumber > checkRider.anotherNumber ) {
return true
}
else {
return false
}
}

然后,我只是创建了VehicleConstraintLinker来将其链接起来,瞧。

我的问题是:是否有任何方法可以限制GroovyShell的功能?我可以使其无法更改任何文件,全局变量或数据库数据吗?这够了吗?

最佳答案

请注意,仅以各种形式拒绝访问java.iojava.lang.Runtime是不够的。恶意代码有很多具有很多权限的核心库可能被恶意程序利用,因此您需要将不受信任的脚本可以访问的符号列入白名单(沙盒或基于功能的安全性),或者限制JVM中可以执行的操作做(通过Java SecurityManager)。否则,您很容易受到confused deputy attacks的攻击。

provide security sandbox for executing scripts尝试与GroovyClassLoader一起使用以提供沙箱。

Sandboxing Java / Groovy / Freemarker Code - Preventing execution of specific methods讨论了沙盒常规的方式,但没有专门讨论evaluate边界。

Groovy Scripts and JVM Security讨论了沙盒groovy脚本。我不是JVM安全策略的忠实拥护者,因为安装安全管理器可能会影响JVM中的许多其他事情,但是它确实提供了一种拦截对文件和运行时内容的访问的方法。

我不知道前两个方案中的任何一个都受到了广泛的攻击,因此如果不进行全面的攻击审查,我将不愿意部署它们。 JVM安全管理器在浏览器中遭受了广泛的攻击,并遭受了许多失败。它可以是很好的纵深防御,因此,我不会将它作为任何珍贵事物的唯一防线。

关于security - Groovy/Grails:有没有办法使.evaluate()完全安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com