LuaSandbox/tr

LuaSandbox PHP 7 ve PHP 8 için, güvenilmeyen Lua 5.1 kodunun PHP içinden güvenli bir şekilde çalıştırılmasına izin veren bir uzantıdır; bu, genellikle bir Lua ikili dosyasına göndermekten ve süreçler arası iletişimi kullanmaktan daha hızlı olacaktır.

Ön paketli
LuaSandbox, Debian 10 ve Ubuntu 18.04 ve sonraki sürümlerde mevcuttur. Aşağıdaki komutla yükleyin:

PECL
LuaSandbox artık önceden oluşturulmuş Windows DDL'leri de sağlayan PECL'de mevcuttur. Paket sayfamıza bakın. Önce, aşağıda "el kurulum" altında açıklandığı gibi doğru Lua 5.1 kitaplığını edinin. Sonra çalıştırın:

sudo pecl install luasandbox



Gereksinimler
PHP ve Lua 5.1 için başlıkları ve kitaplık dosyalarını kurun.
 * Ubuntu gibi Debian'dan türetilen Linux dağıtımları için:
 * CentOS/Redhat'tan türetilen Linux dağıtımları için:
 * macOS için:

İndir
Kaynak kodunu git'ten uygun bir dizine indirin:

Veya ve paketi açın.

Yapı
burada LuaSandbox Git deposunun klonlandığı dizindir.

Ardından PHP yapılandırmasına uygun bir yere  ekleyin. Örneğin, modern Debian'dan türetilen dağıtımlarda  ile bir dosya eklersiniz (burada , LuaSandbox'a uyduğunuz PHP sürümüdür) ve bunu etkinleştirmek için   komutunu kullanırsınız.

LuaSandbox'ı MediaWiki gibi bir web uygulamasıyla kullanıyorsanız, uzantıyı yüklemek için web sunucunuzu veya PHP için  yeniden başlatmanız gerekir. Böyle bir yeniden yüklemeden sonra, LuaSandbox'ı  ve   (ve Scribunto yüklü MediaWiki için Special:Version) çıkışında görmelisiniz.

Belgelendirme
Bu uzantı şimdi PHP kılavuzunda belgelenmiştir.

Kılavuzu değiştirmek istiyorsanız, GitHub'daki PHP kılavuz deposuna karşı bir çekme talebi gönderebilir veya uzantının Gerrit projesindeki LuaSandbox bölümünün aynasını değiştirebilirsiniz.



Standart Lua'dan farklılıklar
LuaSandbox, standart Lua 5.1'den bazı yönlerden farklı olan deneme tahtalı bir ortam sağlar.

Aşağıdaki işlevler ve paketler kullanılamaz:


 * Doğrudan dosya sistemi erişimine izin verdikleri için, ve  paketi. Gerekirse, dosya sistemine erişim PHP geri çağrıları yoluyla yapılmalıdır.
 * Büyük ölçüde doğrudan dosya sistemi erişimine bağlı olduğundan,  ve   dahil olmak üzere . Bunun yerine Scribunto'da kullanılan gibi bir saf Lua yeniden yazma kullanılabilir.
 * Lua kodunun statik analizine izin vermek için ve.
 * Standart çıkışa çıktığı için . Gerekirse, çıkış PHP geri çağrıları yoluyla yapılmalıdır.
 * İşlemin manipüle edilmesine ve diğer işlemlerin yürütülmesine izin verdiği için paketinin çoğu.
 * ,,   ve   mevcut kalır.
 * paketin çoğu, Lua durumunun ve meta verilerin deneme tahtasına bozabilecek şekillerde manipüle edilmesine izin verdiği için.
 * kullanılabilir durumda kalır.
 * , çünkü dahili verileri açığa çıkarabilir.
 * , ve  paketi güvenlik açısından incelenmemiştir.

Aşağıdaki özellikler değiştirildi:


 * ve belirli hataları, özellikle zaman aşımı hatalarını yakalayamaz.
 * , işaretçi adreslerini içermez.
 * Özyineleme derinliğini sınırlamak ve bir zaman aşımını periyodik olarak kontrol etmek için yamalandı.
 * ve, PHP'nin  ile durumu paylaşmayan sürümlerle değiştirilir.
 * Lua 5.2 ve  meta yöntemleri   ve   tarafından desteklenir.

Geçmiş
Yıllar geçtikçe, MediaWiki'nin vikimetin şablon dili daha fazla özellik kazandı ve daha karmaşık hâle geldi. 2009 gibi erken bir tarihte, MediaWiki geliştiricileri, vikimetni daha karmaşık hâle getirmeye devam etmek yerine gerçek bir betik dili yerleştirme fikrini tartışmaya başladılar.

Böyle bir proje için gereksinimler, üretim sunucularında güvenilmeyen kullanıcı kodunu çalıştıracağından, güçlü bir deneme tahtası ve bellek ve CPU zaman kullanımında katı sınırlamaları içeriyordu. Daha iyi performans için büyük bir fayda sağlamak için süreç içinde bir PHP uzantısı aracılığıyla çalıştırılabilme özelliği ile bağımsız bir ikili dosyaya bombardıman edilerek kullanılabilir olması gerekir.

Geliştirme 2011'de ciddi bir şekilde başladığında, dört aday dil belirlendi: Lua, JavaScript, PHP veya geliştirilecek varsayımsal bir "WikiScript" dili. Lua'nın birkaç avantajı vardı:


 * Küçük (170K bağımsız) ve hızlı. LuaJIT'in varlığı da bir fayda olarak kabul edildi.
 * CPU ve bellek sınırlaması için kolay kancalar dahil olmak üzere gömmek için tasarlanmıştır.
 * Kolay deneme tahtası, dahili küresel yok.
 * Gömme talimatları da dahil olmak üzere ayrıntılı kaynak kılavuzu.

Ana dezavantajı, JavaScript kadar yaygın olarak bilinmemesiydi.

O zamanlar V8 motoru biçimindeki JavaScript'in birkaç dezavantajı vardı:


 * Gömmeyle ilgili minimum belgelendirme.
 * Belirsiz gömme için devam eden destek.
 * Ayırma kancası yok.
 * Büyük bağımsız ikili dosya.

Rhino motoru daha kötüydü, Java ile yazıldığı için aklı başında PHP'ye yerleştirilemezdi. Doğru gömme ve deneme tahtası oluşturma son derece zor olacağından ve ön ayrıştırma yavaş olacağından PHP'nin kendisi reddedildi ve "WikiScript" sıfırdan bir (veya iki) yorumlayıcı geliştirmeyi gerektireceğinden çok daha büyük bir proje olacaktı.

Bu nedenle, Lua, özellikle o sırada mevcut olan 5.1 sürümü seçildi ve bu PHP uzantısı geliştirildi. 5.2'de ortam işleme işlevinde yapılan değişiklikler, o zamandan beri basit bir yükseltmeyi engelledi, ayrıntılar için T178146 sayfasına bakın.



Dış bağlantılar

 * Kaynak kodu
 * Debian paketi
 * Kod belgelendirmesi