Kullanıcıların sunucuma karşı rasgele, güvenilmeyen python kodu ( bunun gibi ) çalıştırmasına izin vermem gereken bir projem var . Python için oldukça yeniyim ve sisteme güvenlik delikleri veya diğer güvenlik açıkları getirecek herhangi bir hata yapmaktan kaçınmak istiyorum. Hizmetimi kullanılabilir hale getirmek için kullanabileceğim, kötüye kullanılamaz hale getirebileceğim en iyi yöntemler, önerilen okumalar veya diğer işaretçiler var mı?
İşte şimdiye kadar düşündüklerim:
- Gibi potansiyel olarak tehlikeli paketlerin kullanımını yasaklamak
__builtins__
içinexec
bağlamdan çıkarınos
. Kullanıcılar yalnızca kendilerine sunduğum paketleri kullanabilecekler. - Makul bir zaman aşımını zorlamak için konuları kullanın.
exec
Bağlam içinde ayrılabilecek toplam hafıza miktarını sınırlamak istiyorum , ancak mümkün olup olmadığından emin değilim.
Bir düz için bazı alternatifler var exec
, ancak bunlardan hangisinin burada yardımcı olacağından emin değilim:
ast.NodeVisitor
Güvenli olmayan nesnelere erişmek için herhangi bir girişimi yakalamak için Using kullanın. Ama hangi nesneleri yasaklamalıyım?- Girişte herhangi bir çift alt çizgi aranıyor. (yukarıdaki seçenekten daha az zarif).
- Kullanma
PyPy
veya kodu sandbox'a benzer bir şey kullanmak .
NOT: En az bir JavaScript tabanlı tercüman olduğunu biliyorum . Bu benim senaryomda işe yaramayacak.