我正在尝试将一大堆逻辑封装到一个 Python 函数中,并将其作为参数传递给我想在服务器上执行它的远程 RPyC 方法。但 RPyC 将函数视为回调并在本地执行。有办法解决吗?我可以强制服务器在服务器上而不是在客户端上执行它吗?
谢谢你。
teleport_function 允许我将功能从客户端传输到服务器。
http://rpyc.readthedocs.org/en/latest/api/utils_classic.html#rpyc.utils.classic.teleport_function
RPyC 似乎可以传输int, long, bool, str, float, unicode, bytes, slice, complex, tuple (of simple types), forzenset (of simple types) as well as the following singletons: None, NotImplemented, and Ellipsis
(来自RPyC 手册),因此您可以发送 unicode,您可以将代码作为字符串发送,并在服务器端对其进行评估。
请注意,如果您这样做,我将能够在您的服务器上发送诸如此类os.unlink(sys.argv[0])
的内容,或者您可能不想要的此类内容。换句话说,允许服务器运行任意代码是一个巨大的安全漏洞。
因此,如果您在服务器到服务器的情况下,这是可行的,但我认为您并不真正需要它,如果您完全信任双方,但如果它是客户端-服务器应用程序,那就不行了。
如果您决定采用这种方式,那么 eval 可能不是正确的选择,它会过多地打开您的服务器。你已经探索了一些限制可能性的方法,根据你想要允许你bunch of logic
做的事情,搜索“python eval security”,你会发现一些有趣的线程。