2010-07-23 12 views
6

मैं अपने उपयोगकर्ताओं तक पहुंचने वाली PHP कार्यक्षमता को सीमित करना चाहता हूं।सैंडबॉक्सिंग उपयोगकर्ता का PHP कोड

उदाहरण के लिए एक ऑब्जेक्ट $data है और उपयोगकर्ता iffor और echo का उपयोग करना पसंद करता है।

जाहिर है उसे लिखने के लिए पीएचपी एक गंभीर जोखिम होगा की इजाजत दी।

वहाँ एक खिलौने के डिब्बे में इस पीएचपी चलाने के लिए कोई तरीका है या आप किसी भी हल्के पीएचपी टेम्पलेट इंजन की सिफारिश करेंगे?

+0

देखें: http: // stackoverflow।कॉम/प्रश्न/324726/is-there-a-way-to-execute-php-code-in-a-sandbox-from-in-php – troelskn

उत्तर

8

आप अपने खुद के सर्वर नहीं है, तो आप शायद runkit जरूरत नहीं है। लेकिन आपके पास क्या है (शायद) Tokenizer है! टोकननाइज़र का उपयोग करके आप दिए गए स्रोत कोड को देख सकते हैं और अगर आपको अमान्य टोकन मिल जाए तो निरस्त कर सकते हैं। Here an example how to validate an array using this। आप अपने उद्देश्य के लिए भी ऐसा ही कर सकते हैं। PHP दस्तावेज़ में a list of tokens है। अगर आपको यह तय करने में मदद की ज़रूरत है कि कौन से टोकन को अनुमति देना या अस्वीकार करना है, तो कृपया ऐसा कहें।

€ DIT: और स्पष्ट रूप से मैं Twig भी उपयोग करने के लिए सिफारिश करते हैं। यह बहुत अच्छा है - और सैंडबॉक्सिंग है!

+0

ट्विग ने टेम्पलेट कोड को सैंडबॉक्स किया है। यह नहीं है रनकिट-सैंडबॉक्स के रूप में अच्छा है लेकिन मुझे php सर्वर को पुनर्स्थापित करने की आवश्यकता नहीं है। बहुत बहुत धन्यवाद! – jantimon

2

कोशिश की Smarty? http://www.smarty.net/

+2

भी है ड्यूवो: http://dwoo.org/ जो अधिक है PHP5-ish – Macmade

+0

@Gommey: यदि आप वास्तव में केवल कस्टमाइज़ करने योग्य आउटपुट चाहते हैं, तो यह आपकी पसंद है। एक टेम्पलेट इंजन एक php-sandbox से बनाए रखने के लिए बहुत आसान है। – Baju

1

PECL runkit extension सैंडबॉक्सिंग प्रदान करता है, लेकिन यह संभवतः क्या आप

4

केवल एक ही मैं अब तक पता runkit है क्या करना चाहते हैं के लिए एक सा overkill है।

runkit विस्तार संशोधित स्थिरांक, उपयोगकर्ता परिभाषित काम करता है, और उपयोगकर्ता-निर्धारित वर्गों के लिए साधन प्रदान करता है। यह भी कस्टम superglobal चर और सैंडबॉक्सिंग के माध्यम से एम्बेड करने योग्य उप दुभाषियों के लिए प्रदान करता है।

अद्यतन:

मैं Zend के बारे में इन दो लिंक खोजने के लिए और runkit आप पर एक नज़र रखना चाहिए सकता है:

http://framework.zend.com/wiki/display/ZFPROP/Zend_Http_Server+-+Mat+Scales
http://www.dunfy.me.uk/?p=38

+0

रंकिट को थ्रेड सुरक्षा सक्षम करने की आवश्यकता है और ज़ेंड को थ्रेड सुरक्षा अक्षम करने की आवश्यकता है .. क्या ज़ेंड और रंकिट का उपयोग करने का कोई तरीका है? – jantimon

+0

'Runkit_Sandbox क्लास केवल PHP 5.1.0 या PHP 5.0 के विशेष रूप से पैच किए गए संस्करणों के रूप में उपलब्ध है, और इसके लिए थ्रेड सुरक्षा सक्षम होना आवश्यक है ' मेरी' phpinfo() 'runkit सक्षम है हालांकि runkit_sandbox संभवतः अक्षम है थ्रेड सुरक्षा – jantimon

+0

@ गोमॉमी: यही वह है जो हमने अभी तक किया है :( – Sarfraz

4

चतुर की पंक्तियों के साथ, देना twig एक कोशिश करो!

एक बहुत मजबूत extension system भी है जो आपको टेम्पलेट भाषा में अंतर्निहित या कस्टम टैग, टोकन पार्सर्स, नोड्स इत्यादि को अनुमति/अनुमति देने की अनुमति देता है। इस तरह, उपयोगकर्ताओं के पास बुनियादी तर्क (सशर्त बयान, "कार्य" (ब्लॉक) और इटरेटर) हो सकते हैं, बिना eval की बुराइयों का सहारा ले सकते हैं।

+1

+1 टिग का प्रस्ताव देने के लिए +1 - यह सबसे अच्छा है! – NikiC

+0

ट्विग पानी से चतुरता से उड़ाता है और यह अभी भी सक्रिय विकास में है। –

1

PHP Fat-Free Framework एक टेम्पलेट इंजन है कि PHP कोड का उपयोग प्रतिबंधित है और आप जो कार्यों एचटीएमएल टेम्पलेट्स के अंदर इस्तेमाल किया जा सकता परिभाषित करने के लिए अनुमति देता है।

एक असली सैंडबॉक्सिंग सुविधा भी है जो फ़ंक्शंस बनाता है और दूसरों से स्वतंत्र फ़ाइलों को शामिल करती है, यानी एक में चर/फ़ंक्शंस शामिल हैं, फ़ाइल में दूसरों के लिए ज्ञात नहीं है, इसलिए आपके पास एक समान नाम वाला फ़ंक्शन हो सकता है क्योंकि फ़ाइल में एक और शामिल है। यह (डिसफंक्शनल) डेवलपर टीमों के लिए कुछ उपयोग हो सकता है।

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

  • कोई संबंधित समस्या नहीं^_^