2013-01-25 18 views
5

Bir API ile arabirim oluşturan bir Python betiğim var. Script bir PHP sayfasından başlatıldı. Her iki senaryo yazdım, bu yüzden kodu uygun şekilde değiştirebilirim.İşlemi başlat, ps'den bağımsız değişkenleri gizle

Python betiği, API ile arabirim oluşturmak için bir kullanıcı adı ve parola gerektirir. Bir veri yazma ben düşünüyorum

$ ps | grep someScript 
1000  23295 2.0 0.2 116852 9252 pts/0 S+ 15:47 0:00 python someScript.py AzureDiamond hunter2 

Alternatifler vardır:

Ancak
<?php 
exec('python someScript.py AzureDiamond hunter2'); 
?> 

, herkes o zaman ps aracılığıyla kimlik bilgilerini görebilirsiniz: Benim ilk eğim CLI argümanlar olarak Python bunları geçmektir metin dosyası veya sqlite veritabanı, daha sonra bunları silmek için. Daha iyi bir fikir var mı? Sqlite yaklaşımı ile bir kısıtlama bu oldukça taşınabilir bir şekilde (phpFox Plugin) çalıştırmak gerekiyor ve çoğu bütçe webhosts sqlite3 modülünü desteklemiyor olmasıdır.

+2

Boruları belki de borularla iletebilirsiniz. Ortam değişkenlerini ayarlamak için proc_open() öğesine bakınız. –

cevap

1

PHP'de ayarladığınız ve Python komut dosyasında okuduğunuz ortam değişkenlerini kullanabilirsiniz.

+0

Teşekkürler, bunu deneyeceğim. Sistemde çalışan diğer kullanıcılardan ne kadar güvenli ve aynı kullanıcı olarak çalışan diğer işlemlerden ne kadar güvenli (kullanıcı Apache'yi başlattı)? PHP betiğinin ölümünden sonra ne kadar süre sonra ortam değişkeni devam ederse, Python betiği üzerine yazmak için yükleme başarısız olur mu? – dotancohen

+2

Kısmi cevap: Aynı kullanıcı olarak çalışan diğer işlemlerden güvenli değildir: PID/çevre okuyabilir/proc/$ /. –

+0

Bir Linux işletim sisteminde olmanız durumunda, ortam değişkenini sadece exec ("USERNAME = paul PASSWORD = mypw python script.py") gibi bir işlev kullanarak python yorumlayıcısını yürüten kabuk için ayarlayabilirsiniz. php sürecinin ortamı. Anton'un dediği gibi, python süreci devam ederken ortam aynı kullanıcı için hala görülebilir. – Bernhard

0

Başka bir açıdan soruna bakarak, exec() öğesine iletilen düz karakterleri gizlerseniz çözülebilir. Göndericiden gelen düz metni gizlemek ve alıcıda şifresini çözmek için herhangi bir şifreleme protokolü kullanmayı düşündünüz mü? Sadece bir düşünce.

1

Önerilen yöntemler, olmasını bekleyen bir güvenlik sorunudur. MyProxy özel anahtarları veya sertifikaları işlemek için güvenli bir yoldur. MyProxy ihtiyacınız olan belirli bir çözüm olmayabilir, ancak bu tür çözümler bakmanız gereken şeydir.

http://grid.ncsa.illinois.edu/myproxy/

1

Parametreleri okumak ve php den böyle sürecini açmak için piton sürecinde Stdin kullanabilirsiniz: Bu diğer süreçler karşı ne kadar güvenli olduğunu bilmiyorum

<?php 
$handle = popen("/bin/python /var/www/someScript.py", "w"); 
// write username and password to $handle (e.g. newline separated) 
?> 

Aynı kullanıcı olarak çalışarak (/ proc/nn/fd/0? dan kaçırıldı), ancak süreç listesine bakmaktan daha da zorlaşır.

İlgili konular