PHP exec güvenli mi?

2 Cevap php

Ben bir Windows sunucu üzerinde exec çalışma almak için çalışıyor ve "çatal edemiyor" hata mesajı alıyorum. Meseleyi biraz Googling sonra, önerilen düzeltme IUSR hesap OKUMA vermek ve c izinleri yürütmek için görünüyor: \ Windows \ System32 \ cmd.exe.

Ama bu büyük bir güvenlik deliği doğru var? Güvenli mi? [Php] adlı sunucuda bulunan bir exe çalıştırmak için başka bir yolu var mı?

2 Cevap

Zaman Windows PHP görüyor çünkü cmd.exekutusuna yürütmek gerekiyor:

exec("foo -bar -baz");

Bu aramalar:

cmd /c foo -bar -baz

Eğer kullanıcı parametrelerini girmek izin verirsen sadece bir güvenlik delik. I.E., bunu yapmamalısınız:

// DO NOT DO THIS!
exec("foo -bar=" . $_GET['bar']);

Bunun yerine, escapeshellarg ile parametreleri sterilize edilmelidir.

// This is okay.  (Be sure foo.exe can handle unexpected input!)
exec("foo -bar=" . escapeshellarg($_GET['bar']));

Aklınızda tutmanız gereken tek şey, Windows altında bir süreç oluşturmak Unix-sınıfı işletim sistemleri üzerinde yaptığından daha fazla yükü doğurur olmasıdır. Kullanıcıların bir sayıda, tekrar tekrar arama varsa exec() sunucuyu çıkmaza olabilir. Eğer sunucu üzerinde ağır bir yük tahmin ediyorsanız, bir işçi işlemi Windows service gibi sürekli çalışan olan düşünebilirsiniz