您正在查看9.0 -版本的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 |
修改线程,例如,通过调用Threadinterrupt, stop, suspend, resume, 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安全文档