web-dev-qa-db-fra.com

Pourquoi PL / Python est-il ni carré?

Selon les documents:

Pl/Python n'est disponible que comme une langue "non approuvée", ce qui signifie qu'il n'offre aucun moyen de limiter ce que les utilisateurs peuvent y faire et est donc nommé PLPYTHONU. Une variante de confiance PLPYTHON pourrait devenir disponible à l'avenir si un mécanisme d'exécution sécurisé est développé à Python.

Pourquoi exactement est-il difficile de développer un mécanisme d'exécution sécurisé pour Python mais pas pour d'autres langues telles que Perl?

11
foobar0100

C'est à faire avec le modèle d'objet de Python - il y a toujours un moyen d'obtenir une référence à des objets qui pourraient être dangereux. Voir la Documentation du module REXEC et le Chapitre d'exécution restreint de la DOCS pour certaines informations sur les problèmes, ainsi que:

Les limitations ne sont rien à voir avec PostgreSQL Sois Soi, ils sont inhérents à la mise en œuvre de l'interprète CPPHON ou éventuellement même le Python Language.

Certaines autres langues ont vérifié des runtimes, comme Perl, Java, JavaScript et Lua. La plupart d'entre eux ont été confrontés à une série de problèmes de sécurité car de tels environnements d'exécution confinés sont très difficiles à protéger contre tous les exploits de jailbreak possibles.

Il n'y a vraiment rien d'arrêter postgretsql à partir de l'ajout d'un interprète semi-fruits Python Interprète, puisque REXEC est "assez bon" à plusieurs fins. PostgreSQL n'a pas tendance à être désireux - surtout-un peu-assez bon -Maybe cependant. Cela ne serait probablement accepté que si marqué superutilisateur - seulement, mais vous pouvez toujours vous accorder l'accès à celui-ci pour des utilisateurs spécifiques. Ce serait mieux que Python sans fourchette.

Personnellement, je pense que PL/V8 ou similaire est l'avenir ici et aimerais le voir évoluer vers le soutien de la noyau.

J'ai également exploré vaguement l'idée d'un mono de confiance qui peut charger des assemblages "sûrs" écrits en C #, vb.net, ironpython ou autre mais je n'ai pas pu faire beaucoup sur ce sujet .

13
Craig Ringer