Postgresql
為什麼 PL/Python 不受信任?
根據文件:
PL/Python 僅作為“不受信任”的語言提供,這意味著它不提供任何方式來限制使用者可以在其中執行的操作,因此被命名為 plpythonu。如果在 Python 中開發了一種安全的執行機制,那麼未來可能會出現一個受信任的變體 plpython。
為什麼要為 Python 開發安全的執行機制卻很難為其他語言(例如 Perl)開發安全執行機制?
這與 Python 的對像模型有關——總有一種方法可以獲取對可能不安全的對象的引用。有關問題的一些資訊,請參閱rexec 模組文件和文件的受限執行章節,以及:
- https://www.researchgate.net/publication/228612669_Controlling_access_to_resources_within_the_python_interpreter
- http://tav.espians.com/paving-the-way-to-securing-the-python-interpreter.html
- https://stackoverflow.com/q/525056/398670
這些限制與 PostgreSQL 本身沒有任何關係,它們是 CPython 解釋器實現所固有的,甚至可能是 Python 語言本身所固有的。
其他一些語言已經檢查了執行時,例如 Perl、Java、JavaScript 和 Lua。他們中的大多數人都面臨著一系列安全問題,因為這種受限的執行環境很難防止所有可能的越獄攻擊。
沒有什麼能阻止 PostgreSQL 添加一個半可信的 Python 解釋器,因為 rexec 對於許多用途來說“足夠好”。不過,PostgreSQL 並不傾向於只熱衷於大多數情況下可能還不錯。如果標記為僅限超級使用者,它可能只會被接受,但您始終可以為特定使用者授予對它的訪問權限。它會比不受信任的 Python 更好。
我個人認為 PL/V8 或類似的東西是這裡的未來,並希望看到它在核心中得到支持。
我還模糊地探索了一個受信任的 Mono 的想法,它可以載入用 C#、VB.NET、IronPython 或其他任何東西編寫的“安全”程序集,但在該主題上還沒有做太多事情。