您正在查看版本9.2的RapidMiner开发人员文档查看最新版本
安全与限制
为了进一步为我们的所有用户提供安全可靠的体验,从RapidMiner Studio 7.2开始,我们引入了两个java.lang.SecurityManager
和一个java.security.Policy
到RapidMiner Studio。相应的实现可以在com.rapidminer.security
包中。这些机制将防止来自特定或未知来源的某些危险呼叫,例如第三方扩展。这意味着如果违反了以下任何一点,aSecurityException
将被抛出,调用将被阻止。从RapidMiner Studio 7.2开始的第三方扩展的默认限制列表:
- 文件删除之外的
java.io.tempdir
文件夹和/ workspace / rmx_yourExtension .RapidMiner /扩展不允许使用文件夹。 ReflectPermission
根本不被允许。这包括newProxyInPackage。*
和suppressAccessChecks
。注意,常规(非侵入性)使用反射是可以的,而且仍然是允许的!- 没有
RuntimePermissions
除了accessDeclaredMembers
,getenv。*
,getFileSystemAttributes
,readFileDescriptor
,writeFileDescriptor
,queuePrintJob
,shutdownHooks
是理所当然。 - 没有
AWTPermissions
除了listenToAllAWTEvents
,setWindowAlwaysOnTop
,watchMousePointer
是理所当然。 - 试图取代
SecurityManager
RapidMiner Studio的不允许任何代码。
请注意,Java安全性遵循最低公分母原则。调用的权限由调用堆栈中任何部分的最低权限定义。这包括您正在使用的库。例如,如果这些库依赖于使用反射来抑制访问检查,那么它们将不再适用于您的扩展。
如果RapidMiner Studio版本为快照,将所有权限授予所有扩展。这样做是为了简化扩展开发人员的工作。要测试扩展在实际条件下的行为,请编辑gradle.properties文件,并删除快照后缀。然后执行Gradle任务jar
更新版本并重新启动Studio。
授予额外权限
从RapidMiner Studio 7.4开始用户就有了大的许可证可以为未签名的扩展授予额外的权限。这可以在“设置”的“启动”部分进行配置。激活此设置将启用以下权限:
集团 | 许可 | 描述 |
---|---|---|
AWTPermission |
accessClipboard |
向AWT剪贴板发送和检索信息 |
ReflectPermission |
suppressAccessChecks |
提供访问类中的字段和调用方法的能力。这不仅包括公共的,还包括受保护的和私有的字段和方法。 |
ReflectPermission |
newProxyInPackage。* |
能够在指定的包中创建代理实例,其中代理类实现的非公共接口。 |
RuntimePermissions |
createClassLoader |
创建类装入器 |
RuntimePermissions |
getClassLoader |
类装入器的检索(例如,调用类的类装入器) |
RuntimePermissions |
setContextClassLoader |
线程使用的上下文类装入器的设置 |
RuntimePermissions |
enableContextClassLoaderOverride |
线程上下文类装入器方法的子类实现 |
RuntimePermissions |
closeClassLoader |
关闭类加载器 |
RuntimePermissions |
setFactory |
设置ServerSocket或socket使用的套接字工厂,或URL使用的流处理程序工厂 |
RuntimePermissions |
modifyThread |
线程的修改,例如,通过调用Thread中断,停止,暂停,恢复,setDaemon, setPriority, setName和setUncaughtExceptionHandler方法 |
RuntimePermissions |
stopThread |
通过调用线程停止线程停止方法 |
RuntimePermissions |
modifyThreadGroup |
线程组的修改,例如通过调用ThreadGroupdestroy, getParent, resume, setDaemon, setMaxPriority, stop,暂停方法 |
RuntimePermissions |
loadLibrary。* |
指定库的动态链接 |
RuntimePermissions |
getStackTrace |
获取另一个线程的堆栈跟踪信息。 |
RuntimePermissions |
setDefaultUncaughtExceptionHandler |
设置当线程因未捕获异常而突然终止时使用的默认处理程序。 |
RuntimePermissions |
首选项 |
表示访问java.util.prefs.Preferences实现用户或系统根所需的权限,这反过来允许在Preferences持久备份存储中检索或更新操作。 |
PropertyPermission |
写 |
允许写作。允许System.setProperty被召唤。 |
未来的计划
请注意,我们将进一步限制第三方扩展在未来能够做的事情,以继续为所有用户提供安全可靠的体验。为了允许需要这些权限的复杂(和安全)扩展,我们还将在那个时候引入获得这些权限的机制,例如通过提供扩展验证和签名,或者通过添加允许用户显式授予这些权限的机制。关于具体的限制,目前还没有最终的清单,但对于未签署的第三方扩展,可以合理地假设以下几点:
- 特定扩展工作区文件夹之外的读/写访问权限/ workspace / rmx_yourExtension .RapidMiner /扩展文件夹)将需要用户的允许
- 类中的类的访问
sun.misc
包装将被完全禁止。这可以扩展到其他方面太阳。*
还有包裹。 - 打开套接字连接(例如使用URLConnections)将受到用户对每个URL的明确许可。
有关Java安全特性的更多信息,请参阅下面引用的Oracle官方文档。Java安全文档