Saya punya proyek di mana saya harus mengizinkan pengguna untuk menjalankan kode python yang sewenang-wenang dan tidak dipercaya ( sedikit seperti ini ) terhadap server saya. Saya cukup baru untuk python dan saya ingin menghindari membuat kesalahan yang memperkenalkan lubang keamanan atau kerentanan lainnya ke dalam sistem. Apakah ada praktik terbaik yang tersedia, bacaan yang disarankan, atau petunjuk lain yang dapat Anda berikan agar layanan saya dapat digunakan tetapi tidak dapat disalahgunakan?
Inilah yang saya pertimbangkan sejauh ini:
- Hapus
__builtins__
dariexec
konteks untuk melarang penggunaan paket yang berpotensi berbahaya sepertios
. Pengguna hanya akan dapat menggunakan paket yang saya berikan kepada mereka. - Gunakan utas untuk menerapkan batas waktu yang wajar.
- Saya ingin membatasi jumlah total memori yang dapat dialokasikan dalam
exec
konteks, tapi saya tidak yakin apakah itu mungkin.
Ada beberapa alternatif untuk straight exec
, tapi saya tidak yakin yang mana dari ini akan membantu di sini:
- Menggunakan a
ast.NodeVisitor
untuk menangkap setiap upaya untuk mengakses objek yang tidak aman. Tapi benda apa yang harus saya larang? - Mencari sembarang garis bawah pada input. (kurang anggun dari opsi di atas).
- Menggunakan
PyPy
atau sesuatu yang mirip dengan sandbox kode.
CATATAN: Saya sadar bahwa setidaknya ada satu juru bahasa berbasis JavaScript. Itu tidak akan berfungsi dalam skenario saya.