类别

版本

安全与限制

为了进一步为所有用户提供安全可靠的体验,从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是理所当然。
  • 试图取代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 修改线程,例如,通过调用Threadinterrupt, stop, suspend, resume, 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安全文档