2013-01-25 13 views
5

से तर्क छिपाएं मेरे पास एक पाइथन स्क्रिप्ट है जो एक एपीआई के साथ इंटरफेस करती है। लिपि एक PHP पृष्ठ से शुरू किया गया है। मैंने दोनों स्क्रिप्ट लिखीं, इसलिए मैं कोड को उचित रूप में बदल सकता हूं।प्रारंभ प्रक्रिया, पीएस

पायथन स्क्रिप्ट को एपीआई के साथ इंटरफेस करने के लिए उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है। एक करने के लिए डेटा लिखने के लिए

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

विकल्प है कि मैं विचार कर रहा हूँ रहे हैं:

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

हालांकि, किसी को तो ps के माध्यम से साख देख सकते हैं: मेरी पहली झुकाव CLI तर्कों के रूप पायथन के लिए उन्हें पारित करने के लिए है टेक्स्ट फ़ाइल या एसक्लाइट डेटाबेस, फिर उन्हें हटाने के लिए। क्या कोई बेहतर विचार है? स्क्लाइट दृष्टिकोण के साथ एक बाधा यह है कि इसे एक पोर्टेबल फैशन (phpFox प्लगइन) में चलाने की आवश्यकता है और अधिकांश बजट वेबहोस्ट sqlite3 मॉड्यूल का समर्थन नहीं करते हैं।

+2

आप इसे पाइप के माध्यम से शायद पारित कर सकते हैं। पर्यावरण चर सेट करने के लिए proc_open() भी देखें। –

उत्तर

1

आप PHP में सेट किए गए पर्यावरण चर का उपयोग कर सकते हैं और पायथन स्क्रिप्ट में पढ़ सकते हैं।

+0

धन्यवाद, मैं कोशिश करूँगा। यह कितना सुरक्षित है कि सिस्टम पर चल रहे अन्य उपयोगकर्ताओं से, और उसी उपयोगकर्ता के रूप में चल रही अन्य प्रक्रियाओं से कितना सुरक्षित (उपयोगकर्ता 'कोई नहीं' क्योंकि अपाचे ने इसे शुरू किया)? पीएचपी स्क्रिप्ट के मरने के बाद पर्यावरण चर स्थिर रहेगा, अगर पाइथन लिपि इसे ओवरराइट करने के लिए लोड करने में विफल रहता है? – dotancohen

+2

आंशिक उत्तर: यह एक ही उपयोगकर्ता के रूप में चल रही अन्य प्रक्रियाओं से सुरक्षित नहीं है: वे पढ़/proc/$ पीआईडी ​​/ वातावरण पढ़ सकते हैं। –

+0

यदि आप एक लिनक्स ओएस पर हैं तो आप केवल पर्यावरण के चर को सेट कर सकते हैं जो कि 'exec ("USERNAME = paul PASSWORD = mypw python script.py") जैसे कुछ का उपयोग करके पाइथन दुभाषिया निष्पादित करता है।' उन में सेट नहीं किया जाएगा PHP प्रक्रिया का वातावरण। जैसा कि एंटोन कहते हैं, पाइथन प्रक्रिया चलने के समय भी वातावरण उसी उपयोगकर्ता को दिखाई देता है। – Bernhard

0

किसी अन्य कोण से समस्या को देखते हुए, यदि आप सादे वर्णों को निष्पादित करने के लिए पास किए गए हैं तो इसे हल किया जा सकता है। क्या आपने प्रेषक से सादा पाठ छिपाने और रिसीवर में डिक्रिप्ट करने के लिए किसी भी क्रिप्टोग्राहिक लिब का उपयोग करने पर विचार किया है? सिर्फ एक विचार।

1

प्रस्तावित विधियां एक सुरक्षा समस्या होने का इंतजार कर रही हैं। MyProxy निजी कुंजी या प्रमाणपत्रों को संभालने का एक सुरक्षित तरीका है। MyProxy आपको आवश्यक विशेष समाधान नहीं हो सकता है, लेकिन इन प्रकार के समाधान आपको देखने की आवश्यकता है।

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

1

आप अजगर प्रक्रिया में stdin का उपयोग पैरामीटर पढ़, और php से इस तरह की प्रक्रिया को खोलने के लिए कर सकते हैं:

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

मैं नहीं जानता कि कैसे सुरक्षित यह अन्य प्रक्रियाओं के खिलाफ है एक ही उपयोगकर्ता के रूप में चल रहा है (क्या इसे/proc/nn/fd/0 से अपहृत कर सकता है?), लेकिन यह निश्चित रूप से प्रक्रिया सूची को देखने से कठिन बनाता है।

संबंधित मुद्दे