2010-09-10 12 views
16

मैं ऐसी वेबसाइट बनाना चाहता हूं जहां लोग अपनी पायथन स्क्रिप्ट अपलोड कर सकें। बेशक मैं उन स्क्रिप्ट को निष्पादित करना चाहता हूं। उन स्क्रिप्ट को कुछ दिलचस्प काम करना चाहिए। समस्या यह है कि लोग स्क्रिप्ट अपलोड कर सकते हैं जो मेरे सर्वर को नुकसान पहुंचा सकता है और मैं इसे रोकना चाहता हूं। मेरे सिस्टम को नुकसान पहुंचाए बिना मनमानी स्क्रिप्ट चलाने का विकल्प क्या है - वास्तव में मेरी प्रणाली को बिना देखे? धन्यवादपायथन, सुरक्षित, सैंडबॉक्स

+0

की अनुमति देता है असुरक्षित कार्यों को निष्क्रिय करने के अजगर कॉन्फ़िगर करने के लिए एक तरीका होता है - यह में पेंट शॉप प्रो सफलतापूर्वक इस्तेमाल किया गया था। दुर्भाग्य से मेरे पास तकनीकी विवरण नहीं है। इसके अलावा एक अनंत लूप अपलोड करके बग शोषण और सादे पुरानी अस्वीकार सेवा की संभावना है। –

+0

यह शायद अपने कंप्यूटर पर चलने वाले स्टैंडअलोन अनुप्रयोगों के लिए बहुत अच्छा होगा, सार्वजनिक सर्वर पर नहीं ... – maliperica

+0

http://codepad.org/ आपको एक स्क्रिप्ट पेस्ट करने और पायथन सहित कई भाषाओं में चलाने की अनुमति देगा। –

उत्तर

6

"नहीं किया जा सकता है।"

मनमाने ढंग से (अविश्वसनीय) स्क्रिप्ट चलाना और सुरक्षित रहना एक विरोधाभास है। आपको कस्टम कर्नल, जेल, वीएमएस, जैसे उपयोग करने के लिए जाना चाहिए।

आप देख सकते हैं कि http://codepad.org/about यह करता है, यह बहुत काम का है।

+0

वाह, यह सहायक था। आपकी पोस्ट के बाद मैं अपने लक्ष्य को प्राप्त करने के लिए पाइथन के समान अपनी छद्म भाषा लिखने की सोच रहा हूं ... – maliperica

+0

आप नवीनतम पीपीपी जोड़ों के साथ टिंकर कर सकते हैं लेकिन मुझे लगता है कि आप cpython तक पहुंच प्रदान करना चाहते थे। – ikanobori

+0

वास्तव में, मैं बस लोगों को अपना कोड जमा करने और बाद में मूल्यांकन करने के लिए पसंद करूंगा .... (इसे चलाएं और देखें कि यह क्या करता है) वैसे भी, मैं बस कुछ कोड अपलोड करना और इसे जांचना संभव बनाना चाहता हूं - बिना किसी नुकसान के - कुछ भी जो लोग – maliperica

1

"नहीं किया जा सकता है," बहुत कठोर है। जावास्क्रिप्ट इंजन आपके वेब ब्राउज़र में रहते हैं और वे अविश्वसनीय स्क्रिप्ट को सुरक्षित रूप से स्वीकार करते हैं और चलाते हैं। हमेशा शोषण की संभावना होती है, लेकिन सही इंजन ऑपरेशन में वे निर्दोष हैं। यहां तक ​​कि "धीमी स्क्रिप्ट" चेक भी हैं जो अनंत लूप को आपके ब्राउज़र पर हमला करने से इनकार करते हैं, उन छोटे अलर्ट संवाद बनाते हैं।

Google ऐप इंजन पायथन वीएम का एक सैंडबॉक्स संस्करण चलाता है जो प्रभावी रूप से सभी शरारती देशी बिट्स को हटा देता है जो आपको अंतर्निहित प्रणाली पर जाने देते हैं। इसे अपने आप को सुरक्षित तरीके से करने के लिए कुछ पायथन वीएम विशेषज्ञता लेंगी।

सैनिटी के लिए, आप सभी बिल्टिन को हटाकर शुरू कर सकते हैं और उन लोगों को श्वेतसूचीबद्ध कर सकते हैं जिन्हें आप प्रमाणित करने के बाद उपयोगकर्ताओं को अनुमति देना चाहते हैं कि वे अंतर्निहित सिस्टम को स्पर्श नहीं करते हैं।

ऐसा लगता है कि किसी ने पहले से ही कुछ किया होगा, लेकिन मुझे ऐसा कोई भी मौजूदा प्रोजेक्ट नहीं पता है जो यह करता है। : -/

+2

से परिचित हैं, यह कोशिश की गई है और आप VM/PyPy/codepad तरीके से चलने के बिना इसे ठीक से नहीं कर सकते हैं। आपको '__builtins __.__ आयात __ ('sys') जैसे बेवकूफ सामानों को अस्वीकार करने की आवश्यकता होगी। बाहर निकलें()' और इसे पाने के कई अन्य तरीकों (स्थानीय() और जैसे)। इसके अलावा, दुभाषिया खुद को अपंग किए बिना। – ikanobori

+0

तो आप कह रहे हैं कि आप इसे ठीक से किए बिना ठीक से नहीं कर सकते हैं? मुझे इतना लगा। ;-) – cdleary

+0

2 समस्याएं: 1) जावास्क्रिप्ट इंजन क्लाइंट-साइड स्क्रिप्ट के रूप में ग्राउंड-अप डिज़ाइन किए गए हैं, पायथन नहीं है; 2) जावास्क्रिप्ट आपके वेब ब्राउजर में रहता है, और वह अविश्वसनीय पायथन सर्वर-साइड चलाने के लिए कह रहा है। मैं मानता हूं कि यह करने योग्य है, हालांकि इसे बहुत सारे काम की आवश्यकता होगी और बहुत सी चीजें सीमित करनी होंगी। –

1

ब्रेट कैनन के पास ऐसा करने के लिए एक तात्कालिक डिजाइन है, आखिर में मुझे पता था, लेकिन यह विकसित नहीं हुआ है। इसलिए जब तक आप ऐसा करने में बहुत प्रयास नहीं कर रहे हैं, तो वर्तमान में सार्वजनिक रूप से उपलब्ध समाधान नहीं है।

ब्रेट का ब्लॉग इस पर है: http://sayspy.blogspot.com/ यदि आप इसे पढ़ने का प्रयास करना चाहते हैं, तो मुझे नए सुरक्षा डिज़ाइन के बारे में उनकी चर्चाओं का सीधा लिंक नहीं मिला। मुझे याद नहीं है अगर मैंने इसके बारे में बात करते हुए अपने ब्लॉग को पढ़ा, या अगर वह उस व्यक्ति में था जहां उसने इसका उल्लेख किया, माफ करना।

कुछ प्रतिबंधित निष्पादन क्षमताओं का उपयोग किया जाता था, लेकिन उन्हें गिरा दिया गया क्योंकि वे अभी काम नहीं कर रहे थे।

ऐसा करना असंभव नहीं है, लेकिन ऐसा कुछ नहीं है जो पाइथन अभी करने में सक्षम है। यह कुछ ऐसा है जो लोग चाहते हैं, लेकिन यह मैंने जो देखा है उससे वास्तव में उच्च प्राथमिकता नहीं है।

+0

AFAICR, योजना गिरा दी गई थी क्योंकि पाइथन से ऐसी सुरक्षा की गारंटी देने का कोई तरीका नहीं है, और बाहरी रूप से लागू सैंडबॉक्स किसी वास्तविक सुरक्षा के लिए जाने का तरीका होना चाहिए। –

+0

हां, यही मेरा मतलब है "उन्होंने अभी काम नहीं किया"। क्षमा करें मैं वहां और अधिक स्पष्ट नहीं था। मैं इस बात से सहमत नहीं होगा कि पाइथन से ऐसी सुरक्षा की गारंटी देने का कोई तरीका नहीं है, मेरा मानना ​​है कि ब्रेट की एक योजना है जो इसे अनुमति देगी, लेकिन मुझे इसके बारे में एक या दूसरे विवरण के लिए उसे स्थगित करना होगा। –

0

trypython.org (BSD licensed source here) आयरनपीथन (सिल्वरलाइट/मूनलाइट के माध्यम से) में इस तरह के एक सैनबॉक्स का एक सुरक्षित ब्राउज़र उन्मुख संस्करण है। आप सर्वर पर उपयोग के लिए इसके एक हेडलेस संस्करण को मैश करने में सक्षम हो सकते हैं - लेकिन आप निश्चित रूप से उपयोगकर्ताओं को एक-दूसरे के बीच स्क्रिप्ट वितरित करने दे सकते हैं, या आप इन स्क्रिप्ट को प्लगइन वातावरण में निष्पादित करने के लिए वितरित कर सकते हैं।

2

अविश्वस्त अजगर कोड आजकल चल रहे वेब सर्वर के काफी एक बहुत देखते हैं:

  • http://codepad.org/ (शायद सबसे कुख्यात अजगर कोड के लिए pastebin)
  • http://codingbat.com/ (पहले Javabat, नाम परिवर्तन अजगर जुड़ना दर्शाने के लिए)
  • http://appengine.google.com/ Google की संरचना पर (मेजबान अजगर कोड)
  • http://www.spoj.pl/ कुख्यात क्षेत्र ऑनलाइन न्यायाधीश कोडिंग चुनौती

आप देखना चाहते हैं कि वे अपनी समस्याओं से कैसे संपर्क करते हैं।

या आप एक अलग दृष्टिकोण को देखने के लिए चाहते हो सकता है:

  • http://pyjs.org/ - पजामा - अजगर करने वाली जावास्क्रिप्ट संकलक
3
(चल क्लाइंट साइड, उनके पक्ष को सुरक्षा समस्या स्विच)

मुझे लगता है कि ऐसा करने का तरीका उन स्क्रिप्ट को सामान्य पायथन शेल में चलाने के लिए है, लेकिन वर्चुअल मशीन पर। मैं पक्षपाती हो सकता हूं, क्योंकि मेरा "नौकरी" वर्तमान में वीएम के साथ खेल रहा है (विश्वविद्यालय महान हैं!)।

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

लेकिन एक बात है: वस्तुतः सभी वेब होस्ट वर्चुअल मशीन हैं और वे अंदर एक और आभासी मशीन का समर्थन नहीं करते हैं। ऐसा करने के लिए आपको एक वास्तविक, भौतिक सर्वर की आवश्यकता है।

4

मैं पहले के संस्करणों में नहीं जानता, पाइथन 3 में आप प्रकारों के माध्यम से कस्टम स्कोप तक पहुंच के साथ फ़ंक्शन बना सकते हैं। फ़ंक्शन टाइप।

def f(): 
    return __builtins__ 

f() # this will work because it has access to __builtins__ 
scope = {} 
sandboxed = FunctionType(f.__code__,scope) 
sandboxed() # will throw NameError, builtins is not defined 

लौटा कार्य केवल स्कोप शब्दकोश में जो कुछ भी प्रदान किया गया है, उस तक पहुंच है। मुझे आश्चर्य है कि अभी भी इसके आसपास हैक हैं।

+0

पायथन 2.7.3 पर परीक्षण किया गया और बिल्कुल वही काम करता है। –

+0

आप आसानी से इस से बाहर निकल सकते हैं। मुझे '__import__' (अभी तक) प्राप्त करने का प्रबंधन नहीं हुआ, लेकिन 'फ़ाइल' पहुंच योग्य है और मनमाने ढंग से पढ़ने/लिखने को सैंडबॉक्स, आईएमओ तोड़ने पर विचार किया जाता है। – Blender

+0

मैंने इसे स्वयं नहीं किया है, लेकिन अंगूठे का नियम यह है कि जब तक आप डबल अंडरस्कोर विशेषताओं तक पहुंच प्राप्त कर लेते हैं तब तक आप टूट सकते हैं। तो कम से कम आपको एएसटी को श्वेतसूची में डालना होगा। – Antimony

1

यदि आप लिनक्स का उपयोग करते हैं तो seccomp समाधान है, यहां तक ​​कि mode 2 अच्छा है। उन लोगों के साथ आप एक नई प्रक्रिया बना सकते हैं जो किसी भी सिस्कल को विफल कर देगी और केवल पहले से ही मौजूदा फाइल डिस्क्रिप्टर पढ़ सकती है।

शायद नामस्थान और सीग्रुप का उपयोग करने से भी मदद मिलेगी, यह सीटीपीएस के साथ किया जा सकता है।

1

आप Ideone एपीआई की कोशिश कर सकते हैं - यह अजगर 2 और अजगर 3

+0

आइडिया एपीआई क्षेत्र इंजन (http://sphere-engine.com) में विकसित हुआ। अब यह पुराने आइडिया एपीआई से कहीं अधिक प्रदान करता है :) – Robson

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