Sunucu tarafı korumalı komut dosyası oluşturma için seçeneklerim nelerdir? [kapalı]


11

Kullanıcıların bazı veriler üzerinden çalıştırmak için verileri ve komut dosyalarını paylaştığı genel bir web sitesi oluşturuyorum. Komut dosyaları bu döngüde başka bir etkileşim olmadan bir tür sanal alanda sunucu tarafında çalıştırılır: Perl programım, Kullanıcı tarafından yapılan bir komut dosyasını veritabanından okur, işlenecek verileri komut dosyasına ekler (yani: bir JSON belgesi), yorumlayıcıyı çağırır, yanıtı (bir JSON belgesi veya düz metin) döndürür, ben benim perl komut dosyası ile veritabanına kaydedin. Komut dosyası, komut dosyası diline eklenmiş yerleşik işlevlere kendim erişebilmeli, ancak başka bir şey olmamalıdır.

Bu yüzden bir javascript yorumlayıcısı olarak node.js üzerine tökezledim ve bir saat kadar önce Google'ın V8'i ile (v8 bu tür bir şey için mantıklı mı?). CoffeeScript de aklıma geldi, çünkü güzel görünüyor ve hala Javascript.

Ben javascript yeterince yaygın ve daha fazla "sandboxeable" çünkü OS çağrıları veya uzaktan güvensiz bir şey (sanırım) yok düşünüyorum.

Bu arada, sistemi ön uç için Perl ve Php üzerine yazıyorum.

Soruyu geliştirmek için: node.js ile uygulamak için yeterince güvenli ve basit olduğunu düşündüğüm için Javascript'i seçiyorum, ancak bu tür bir göreve ulaşmak için başka alternatifler nelerdir? Lua? Python? Korumalı alandaki bir tercümanın nasıl düzgün bir şekilde çalıştırılacağı hakkında bilgi bulamıyorum.


Ne istediğini belli değil. Mümkün mü? Tabii, mümkün.
Robert Harvey

Yanıtlar:


3

Java, yerleşik JavaScript yorumlayıcısı içerir. Varsayılan olarak korumalı alan değildir, ancak bu aşağıdakiler tarafından etkinleştirilebilir:

  • doğru sınıf deklanşörünü ayarlama - JavaScript normalde Java sınıflarını yükleyebilir. Sınıf deklanşörü, hangi sınıfların yüklenebileceğine ve hangilerinin yüklenemeyeceğine karar veren bir tür güvenlik yöneticisidir.
  • "startup" betiği - dış sisteme erişim noktalarını silen kısa JavaScript başlatma: java = undefined;Packages = undefined;org = undefined;

Bunu yaparsanız, içeride çalışan komut dosyalarının dış ortama hiçbir şekilde erişememesi gerekir.

Ayrıca, sanal alan kullanımı için yararlı olan komut dosyası zaman aşımı ve komut sayısı sınırlama işlevselliği sağlar - komut dosyasının ne kadar uzun veya karmaşık olduğunu sınırlayabilirsiniz.

Bunu Rhino JavaScript motoru olan Java 7'de kullandım. Java 8'in daha yeni, daha modern bir motoru var Nashorn - Nashorn ile denemedim ama benzer olmasını bekliyorum.


Kara liste yerine beyaz liste yapabilir misiniz?
Petah

@Petah, önce her şeyi devre dışı bırakabilir (kara listeye alabilir) ve sonra nesne biçimindeki bazı belirli işlevleri sanal alana itebilirsiniz. Bu daha sonra aslında beyaz listeye ekleniyor, bu yüzden evet, bunu yapabilirsiniz.
qbd

JavaScript bilgisi, bir betik dili olarak iyi bir seçim olmasını sağlayacak kadar yaygındır. Çağrılara erişimi kısıtladığınızdan, bazı globalleri ve kullanıcı çağrılarını tanımlamak isteyebilirsiniz. windowEtkileşimi etkinleştirmek için tarayıcının JavaScript değişkenlerini nasıl tanımladığını düşünün .
Michael Shopsin

2

ilk düşüncem node.js idi - yukarıda bahsettiğiniz gibi bir javascript-yorumcusu. Eğer senaryoları gerçekten güvenli bir şekilde yerleştirmek istiyorsanız, tam da ihtiyacınız olan şey budur.

Başka bir yol, bir koddaki her komutu geçerli olup olmadığını kontrol etmeniz olabilir. Ama güvenli bir sanal alan alacağınızı sanmıyorum.

Selamlar


NodeJS i veya NodeJS ile kullanılabilen herhangi bir korumalı alan desteği var mı?
ysdx

4
Bunu buldum
ysdx

+1 "NODE.JS İÇİN NIFTY JAVASCRIPT SANDBOX" için mükemmel bağlantı.
Jack Stone

Not: gf3 korumalı alanı bozulabilir.
Petah
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.