类别

版本

您正在查看版本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除了accessDeclaredMembersgetenv。*getFileSystemAttributesreadFileDescriptorwriteFileDescriptorqueuePrintJob,shutdownHooks是理所当然。
  • 没有AWTPermissions除了listenToAllAWTEventssetWindowAlwaysOnTop,watchMousePointer是理所当然。
  • 试图取代SecurityManagerRapidMiner 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, setNamesetUncaughtExceptionHandler方法
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安全文档