Gerçekten güvenli "safe_eval" mı?

oy
3

Ben (numpy / scipy kullanarak) elektronik tabloya benzer hesaplamalar uygulamak için, güvenli eval işlevi arıyorum.

Işlevselliği bu (yapmak rexec modülü nedeniyle görünüşte unfixable güvenlik sorunlarına 2.3 yana Python kaldırıldı). Ben ise bulduk en düşünülmüş çözüm - çeşitli üçüncü taraf kesmek bunu yapmak pek meali orada vardır bu Python Cookbok tarifi safe_eval.

Ben kötü niyetli kod korumak için, bu (veya benzeri) kullanırsanız oldukça güvenli miyim, yoksa ben kendi ayrıştırıcı yazma ile sıkışmış ben? Herkes daha iyi alternatifler biliyor mu?

DÜZENLEME: Sadece keşfetti RestrictedPython Zope bir parçasıdır. Bu konuda herhangi bir görüş bekliyoruz.

Oluştur 26/08/2008 saat 16:27
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
2

Kendi ayrıştırıcı Yazma eğlenceli olabilir! İnsanların formüller girerek yaparken tanıdık Çizelge sözdizimi (Excel, vs) ve Python kullanmaya bekliyoruz çünkü daha iyi bir seçenek olabilir. Ben safe_eval aşina değilim ama böyle birşeyin kesinlikle sömürü için potansiyele sahip olduğunu hayal ediyorum.

Cevap 26/08/2008 saat 16:44
kaynak kullanıcı

oy
1

Bu kod oldukça güvenli görünse de, hep herhangi yeterince motive kişi yeterli zaman verilmiş molası verebilir görüşünü tuttum. Ben o geçmek için tayin biraz alacak sizce, ama yapılabilir nispeten eminim.

Cevap 27/08/2008 saat 03:37
kaynak kullanıcı

oy
0

Daniel, Jinja veya sizin için yararlı olabilir veya olmayabilir bir sandboxe ortamı uygular. Hatırladığım kadarıyla, henüz Liste comprehensions "idrak" değil.

Sanbox bilgileri

Cevap 28/08/2008 saat 11:12
kaynak kullanıcı

oy
1

Herhalde güvenli tanımına bağlıdır. güvenlik bir sürü yönteme geçen bağlıdır ve bir bağlamda geçmelerine izin ne. Bir dosya içinde geçirilen Örneğin, ben keyfi dosyalarını açabilir:

>>> names['f'] = open('foo', 'w+')
>>> safe_eval.safe_eval("baz = type(f)('baz', 'w+')", names)
>>> names['baz']
<open file 'baz', mode 'w+' at 0x413da0>

Bundan başka, çok kısıtlıdır ortamı (modüller geçemez), ve böylece, sadece yeniden veya rastgele gibi yardımcı fonksiyonları bir modülde geçemez.

Öte yandan, az önce piton ast için kendi değerlendirici yazabilirim kendi ayrıştırıcı yazmak gerekmez:

>>> import compiler
>>> ast = compiler.parse("print 'Hello world!'")

Bu şekilde, umarım, güvenli ithalatı uygulayabilir. Diğer bir fikir Jython veya IronPython kullanmak ve Java / .Net korumalı alan yeteneklerinden istifade etmektir.

Cevap 28/08/2008 saat 12:35
kaynak kullanıcı

oy
1

Sadece yazmak ve Python bazı veri yapısını okumak ve özel kod yürütme gerçek kapasitesini gerekmez gerekiyorsa, bu daha iyi bir uyum: http://code.activestate.com/recipes/364469-safe -eval /

dizeleri, listeler, dizilerini, dictionnaries: Hiçbir kod yalnızca statik veri yapıları değerlendirilir, yürütüldüğünde bu ms'lik.

Cevap 02/08/2011 saat 10:19
kaynak kullanıcı

oy
0

İstediğiniz işlevi görmek derleyici dil hizmetlerinde olduğu http://docs.python.org/library/language.html yalnızca ifadeleri kabul etmek uygulamanızı tanımlarsanız, bir ifadesi olarak girdi derlemek ve bir istisna olmadığını alabilirsiniz noktalı virgül veya deyim formları varsa o örneğin edilmez.

Cevap 06/01/2012 saat 23:41
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more