문서에 따르면 :
PL / Python은 "신뢰할 수없는"언어로만 제공되므로 사용자가 수행 할 수있는 작업을 제한 할 수있는 방법을 제공하지 않으므로 plpythonu라는 이름을 갖습니다. 안전한 실행 메커니즘이 파이썬에서 개발된다면, 앞으로 신뢰할 수있는 변종 plpython을 사용할 수있게 될 것입니다.
왜 Perl과 같은 다른 언어가 아닌 파이썬을위한 안전한 실행 메커니즘을 개발하는 것이 어려운가?
문서에 따르면 :
PL / Python은 "신뢰할 수없는"언어로만 제공되므로 사용자가 수행 할 수있는 작업을 제한 할 수있는 방법을 제공하지 않으므로 plpythonu라는 이름을 갖습니다. 안전한 실행 메커니즘이 파이썬에서 개발된다면, 앞으로 신뢰할 수있는 변종 plpython을 사용할 수있게 될 것입니다.
왜 Perl과 같은 다른 언어가 아닌 파이썬을위한 안전한 실행 메커니즘을 개발하는 것이 어려운가?
답변:
파이썬의 객체 모델과 관련이 있습니다. 안전하지 않은 객체에 대한 참조를 얻는 방법은 항상 있습니다. 문제점에 대한 정보와 다음에 대한 정보 는 rexec 모듈 문서 및 문서 의 제한된 실행 장을 참조하십시오 .
제한 사항은 PostgreSQL 자체와 관련이 없으며 CPython 인터프리터 구현 또는 Python 자체 자체에 내재되어 있습니다.
Perl, Java, JavaScript 및 Lua와 같은 다른 언어는 런타임을 확인했습니다. 이들 중 대부분은 일련의 보안 문제에 직면 해 있습니다. 이러한 제한된 실행 환경은 가능한 모든 탈옥 공격으로부터 보호하기가 매우 어렵습니다.
rexec는 많은 목적을 위해 "충분히"적합하기 때문에 PostgreSQL이 반 신뢰할 수있는 파이썬 인터프리터를 추가하는 것을 막을 방법은 없습니다. PostgreSQL은 거의 대부분의 경우에만 관심이있는 경향이 없습니다. 슈퍼 유저 전용으로 표시된 경우에만 허용되지만 특정 사용자에게 항상 액세스 권한을 부여 할 수 있습니다. 신뢰할 수없는 파이썬보다 낫습니다.
개인적으로 저는 PL / V8 또는 이와 유사한 것이 미래라고 생각하며 핵심에서 지원되는 방향으로 가고 싶습니다.
또한 C #, VB.NET, IronPython으로 작성된 "안전한"어셈블리 또는 해당 주제에 대해 많은 것을 할 수 없었던 모든 것을로드 할 수있는 신뢰할 수있는 Mono에 대한 아이디어를 모호하게 살펴 보았습니다 .
rexec
, 위의 링크와 같이 본질적으로 안전하지 않은 Python 모듈을 사용하지 않는 후에 제거되었습니다 . PyPi를 사용하는 plpython이 Pg가 사용할 수있는 제한된 모드를 제공 할 수 있다고 생각합니다. 나는 많은 일이 있는지 보지 않았다. "Perl의 신뢰할 수있는 특별한 버전"에 대해서도 틀 렸습니다. 사실 완벽하게 평범한 Perl이며, plperl과 plperlu에 동일한 해석기가 사용됩니다. 차이점은 런타임 구성입니다.
pp_require_safe
하고 plperl_trusted_init
. 나는 제한된 Perl 실행의 진정한 안전에 대해 많은 의견을 가질만큼 충분하지 않습니다. 신뢰할 수있는 Lua 버전을 보거나 JavaScript 통역사 인 더 나은 마인드와 입양을 원합니다. 그러나 우리가 가진 것은 지금 plperl입니다.