Php bir komut yürütme güvenlik

7 Cevap php

Ben (örneğin, bir komut satırı programı aracılığıyla Lateks formüller kılmak) PHP exec fonksiyonu ile onları çağıran birkaç thirdy taraf komutları kullanmak hangi bir web uygulaması yazıyorum.

Benim soru: php dış komut satırı programları yürütme güvenlik sorunları nelerdir? Ben farkında olmak ne var? Eğer kontrol etmek için bana noktalarının bir listesini verebilir misiniz?

EDIT: Ben keyfi komutlar çalıştırarak önlemek için kullanıcı girişi temizlemek zorunda farkındayım ... kontrol etmek için başka şeyler var mı?

Şimdiden teşekkürler.

7 Cevap

Kullandığınız komutu içine koyarak olabilir gelen herhangi bir veri kaçmak için dikkatli olun escapeshellarg().

Seçtiğiniz yürütülebilir mutlak yollarını kullanarak yanlış dosyayı çağıran PHP script riskini en aza indirir.

Sonuçta, kullanıcıların istenilen komutları çalıştırmasına izin bahsetmiyoruz - Bunun dışında, ben diğer yanıtlar bazı yaygara hakkında ne olduğunu görmek için başarısız. (Yanılıyorsam beni düzeltin.) Genel olarak, PHP harici komutları çalıştırarak IMO güvenlik açısından mükemmel ince bir uygulamadır.

Aramadan programm PHP kullanıcının hakları ile çalışıyor ve her şeyi yapmak için izin olmayabilir akılda tutmak gerekir, ama ben zaten biliyorum varsayıyorum.

Bu şeyler için dikkat etmeliyiz:

  • Non-Sabit komutları, bu demektir, hiç değilse you, kullanıcı girişi sadece parametreleri olmalı, komut vermelidir.
  • Diğer komutları çalıştırarak içine komutunu kandırmak Parametreler
  • Diğer komutları çalıştırarak içine exec kandırmak karakter Escape
  • Kullanıcı tarafından yüklenen komut adı verilen komut yığını taşmaları veya benzeri güvenlik deliklerinden doğrudan veya dolaylı olarak, diğer komutları çalıştırmak yapacaktır içeriği.

Ayrıca parametrelerinde göreli yolları için dikkat. Her zaman mutlak yollara onları dönüştürmek ve izin yolları bir liste ile karşılaştırmak deneyin.

Diğer insanların taban yolunda programları yüklemek için izin verilirse, kendinizi beklediğiniz yürütme değil bulabilirsiniz.

Eğer ayrıcalıkları ile bu programları yürütmek akılda tutmak, bu yüzden onlar bir şekilde değişti alırsanız, hesabınızın başkaları olabilir.

Nasıl böyle biçimi gibi ... onlar gibi herhangi bir komutu çalıştırmak böylece kullanıcı girişleri temizliği değil kullanma hakkında ;-)

Büyük endişe neredeyse herhangi bir sistem komutu çalıştırmak mümkün olacak olmasıdır. Bu nedenle en azından bir kullanıcı tarafından sağlanan ve exec komutu kullanılan herhangi bir girdi düzgün kaçtı ve doğrulanmış olduğundan emin olmak gerekir.

Bu makalede iyi bir açıklaması var:

http://onlamp.com/pub/a/php/2003/08/28/php_foundations.html

Giriş doğrularken derece exec için göz ardı edilir. (Temel örnek, sen filtreleme boru ve yönlendirmeler konusunda olsa var?) Hayal olamaz böyle komutları kötüye çok olasılık vardır.

Ben OS görünür olmadığı gibi bazı güvenli sandbox exec komutları çalıştırmak için öneririm. Ancak, PHP sizin OS çalışacak çünkü bu çok zor olduğunu akılda tutmak.

Ben kuvvetle kaçarak öneririm. Komut satırında güvenilmeyen verileri damping biraz risklidir. Çok daha iyi sabit argümanları ile harici bir program başlatmak ve buna veri aktarmak için. Ayrıca istediğiniz veya program whatsit-bit set yapmak istiyorum daha PHP yorumlayıcısı için daha fazla izinleri olması gerekebilir ikisi de benim için özellikle hitap ediyor.