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 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:
 * Mac OS X 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.
 * 1, 2, 3 ve 4 $ kullanılabilir durumda 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.

When development started in earnest circa 2011, four candidate languages were identified: Lua, JavaScript, PHP, or a hypothetical "WikiScript" language to be developed. Lua had several advantages:


 * Small (170K standalone) and fast. The existence of LuaJIT was also considered a benefit.
 * Designed for embedding, including easy hooks for CPU and memory limiting.
 * Easy sandboxing, no internal globals.
 * Detailed reference manual, including instructions on embedding.

The main disadvantage was that it wasn't known as widely as JavaScript.

JavaScript, in the form of the V8 engine at the time, had several disadvantages:


 * Minimal documentation on embedding.
 * Continued support for embedding unclear.
 * No allocation hook.
 * Huge standalone binary.

The Rhino engine was worse, as being written in Java it couldn't sanely be embedded in PHP at all. PHP itself was rejected since proper embedding and sandboxing would have been extremely difficult and pre-parsing would have been slow, and "WikiScript" would have been a much larger project in that it would have required developing an interpreter (or two) from scratch.

Thus, Lua was chosen, specifically version 5.1 that was available at the time, and this PHP extension was developed. The changes made to function environment handling in 5.2 have prevented a simple upgrade since, see T178146 for details.