一連のロジックを 1 つの 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」について検索すると、可能性を制限する方法がいくつか見つかります。興味深いスレッドが見つかります。