PL / Python'a neden güvenilmiyor?


11

Dokümanlara göre:

PL / Python yalnızca "güvenilmeyen" bir dil olarak kullanılabilir, yani kullanıcıların içinde yapabileceklerini kısıtlamanın hiçbir yolu yoktur ve bu nedenle plpythonu olarak adlandırılmıştır. Python'da güvenli bir yürütme mekanizması geliştirilirse, güvenilir bir değişken plpython gelecekte kullanılabilir hale gelebilir.

Python için güvenli bir yürütme mekanizması geliştirmek, Perl gibi diğer diller için neden tam olarak zor?

Yanıtlar:


13

Python'un nesne modeliyle ilgilidir - güvensiz olabilecek nesnelere referans almanın bir yolu vardır. Sorunlarla ilgili bazı bilgiler için rexec modülü belgelerine ve dokümanların kısıtlı yürütme bölümüne bakın ve ayrıca:

Sınırlamalar PostgreSQL ile kendi başına bir şey değildir, CPython tercüman uygulamasına veya muhtemelen Python diline özgüdür.

Diğer diller Perl, Java, JavaScript ve Lua gibi çalışma zamanlarını kontrol etti. Sınırlı yürütme ortamlarının olası tüm jailbreak istismarlarına karşı korunması çok zor olduğu için bunların çoğu bir dizi güvenlik sorunuyla karşı karşıya kaldı.

Rexec birçok amaç için "yeterince iyi" olduğundan PostgreSQL'in yarı değerli bir Python yorumlayıcısı eklemesini engelleyen hiçbir şey yoktur. PostgreSQL, belki de sadece çoğunlukla çoğunlukla yeterince iyi olma eğiliminde değildir. Muhtemelen yalnızca yalnızca süper kullanıcı olarak işaretlenmişse kabul edilir, ancak daha sonra belirli kullanıcılar için buna her zaman erişim verebilirsiniz. Güvenilmeyen Python'dan daha iyi olurdu.

Şahsen ben burada PL / V8 ya da benzeri bir gelecek olduğunu düşünüyorum ve bunun çekirdek olarak desteklenmeye doğru ilerlediğini görmek istiyorum.

Ayrıca , C #, VB.NET, IronPython veya başka bir şeyle yazılmış "güvenli" montajları yükleyebilecek güvenilir bir Mono fikrini de belirsiz bir şekilde araştırdım, ancak bu konuda çok şey yapamadım.


Bunu hiç güvenilmemesinin bir nedeni olarak görmedim. Varsayılan olarak, Java, V8, TCL, R ve diğerleri güvenilmez olarak kabul edilir. Bunlar özel PostgreSQL ile Perl sürümünü güvenilen gemi bc Perl güvenilen tek sebebi postgresql.org/docs/11/plperl-trusted.html
TheSteve0

1
@ TheSteve0 Onu böyle görmemiş olabilirsiniz, ama bu yüzden öyle. PostgreSQL, plpythonu'ya sahipti ve Python rexecmodülünün yukarıda bağlandığı gibi doğal olarak güvensiz olarak kaldırılmasından sonra kaldırıldı . Belki PyPi kullanarak bir plpython Pg daha sonra kullanabileceğiniz sınırlı bir mod sunmak mümkün olabilir hayal. Fazla iş olup olmadığını görmek için bakmadım. "Perl'in özel güvenilir versiyonu" hakkında da yanılıyorsunuz - aslında oldukça sıradan Perl, aynı yorumlayıcı plperl ve plperlu için kullanılıyor. Aradaki fark çalışma zamanı yapılandırmasıdır.
Craig Ringer

@ TheSteve0 plperl Perl yorumlayıcı örneklerini çalışma zamanında farklı şekilde yapılandırır. Bkz plperl.c gorey detaylar için, özel olarak pp_require_safeve plperl_trusted_init. Kısıtlı Perl uygulamasının gerçek güvenliği hakkında çok fazla fikre sahip olmak için yeterli bilgim yok. Lua'nın güvenilir bir sürümünü görmeyi veya daha iyi bir paylaşım ve benimseme, güvenilir bir JavaScript yorumlayıcısı almayı tercih ederim. Ama şu an için elimizde plperl var.
Craig Ringer

@ TheSteve0 BTW, Java veya Groovy kodu kullanan Java JVM veya C # veya VB.NET kullanan Mono VM, her iki çalışma zamanında da sağlam sanal alana ve güvenlik yönetimi özelliklerine sahip olduğundan çok mantıklı görünüyor. Örneğin Java'nın SecurityManager'ı. Ancak maalesef her iki çalışma zamanında da PostgreSQL'in hafif işlem, varsayılan olarak paylaşılan çatal () - varsayılan olmayan çatal () için zayıf bir uyum olan, ağır başlangıç, dişli, varsayılan olarak paylaşılan her şeyi yürütme modelleri kullanıyor. Onlar gerçekten çatal () mümkün değil. Bu yüzden onları PostgreSQL'de çok etkili kullanamayız.
Craig Ringer

: Okuyucular burada sürelerini ing) (çatalı Mono kullanarak yeniden Mono proje üzerinde yapılan bu GitHub konuyla ilgilenen olabilir github.com/mono/mono/issues/11857
Craig Ringer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.