سؤال

أنا أبحث عن "آمنة" eval وظيفة لتنفيذ مثل جداول البيانات الحسابية (باستخدام numpy/scipy).

وظائف تفعل هذا ( rexec وحدة) تم إزالتها من بيثون منذ 2.3 بسبب على ما يبدو غير قابل للإصلاح المشاكل الأمنية.هناك العديد من طرف ثالث الخارقة هناك التي تدعي أنها تفعل هذا - الأكثر مدروسة الحل الذي وجدته هذا الثعبان Cookbok وصفة, "safe_eval".

أنا آمنة إلى حد معقول إذا كنت تستخدم هذا (أو شيئا من هذا القبيل), حماية من الشيفرات الخبيثة ، أو أنا عالقة مع كتابة بلدي محلل?لا أحد يعرف من أي أفضل البدائل ؟

تحرير:لقد اكتشفت للتو RestrictedPython, الذي هو جزء من Zope.أي آراء بشأن هذه هي موضع ترحيب.

هل كانت مفيدة؟

المحلول

يعتمد على تعريف آمنة أعتقد.الكثير من الأمن يعتمد على ما كنت تمر في ما يسمح لك لتمرير في السياق.فعلى سبيل المثال ، إذا كان ملف مرت في فتح ملفات التعسفي:

>>> names['f'] = open('foo', 'w+')
>>> safe_eval.safe_eval("baz = type(f)('baz', 'w+')", names)
>>> names['baz']
<open file 'baz', mode 'w+' at 0x413da0>

وعلاوة على ذلك ، فإن بيئة محدودة جدا (لا يمكنك تمرير في وحدات) ، وبالتالي لا يمكنك أن تمر ببساطة في وحدة من وظائف فائدة مثل إعادة أو عشوائية.

من ناحية أخرى, أنت لا تحتاج إلى كتابة الخاصة بك محلل, هل يمكن أن مجرد الكتابة الخاصة بك المقيم الثعبان ast:

>>> import compiler
>>> ast = compiler.parse("print 'Hello world!'")

وبهذه الطريقة نأمل يمكنك تنفيذ آمنة الواردات.فكرة أخرى هي استخدام Jython أو IronPython والاستفادة من جافا/.صافي وضع الحماية القدرات.

نصائح أخرى

الكتابة الخاصة بك محلل يمكن أن يكون متعة!قد يكون الخيار الأفضل لأن الناس يتوقعون استخدام مألوفة جدول الجملة (Excel, الخ) وليس الثعبان عندما ندخل الصيغ.أنا لست على دراية safe_eval ولكن أتصور أن أي شيء من هذا القبيل بالتأكيد لديه القدرة على الاستغلال.

على الرغم من أن التعليمات البرمجية تبدو آمنة تماما, لطالما عقدت ترى أن أي دوافع الشخص بما فيه الكفاية يمكن أن يكسر ذلك إعطاء الوقت الكافي.أنا لا أعتقد أنه سوف يستغرق قدرا كبيرا من العزم على الحصول من خلال ذلك ، ولكن أنا نسبيا متأكد من أنه يمكن القيام به.

إذا كنت ببساطة الحاجة الى كتابة و قراءة بعض البيانات هيكل في بيثون ، و لا تحتاج إلى القدرة الفعلية على تنفيذ التعليمات البرمجية المخصصة ، وهذا هو واحد من أفضل تناسب:http://code.activestate.com/recipes/364469-safe-eval/

فإنه garantees أن لا يتم تنفيذ التعليمات البرمجية فقط ثابت هياكل البيانات يتم تقييمها:سلاسل قوائم الصفوف ، dictionnaries.

دانيال ، جينجا تنفذ sandboxe البيئة التي قد أو قد لا تكون مفيدة لك.من ما أتذكر, لا بعد "فهم" قائمة comprehensions.

Sanbox معلومات

وظيفة كنت ترغب في مترجم اللغة ، http://docs.python.org/library/language.html إذا كان يمكنك تحديد التطبيق الخاص بك لقبول إلا تعبيرات يمكنك تجميع المدخلات كتعبير والحصول على استثناء إذا لم يكن, على سبيل المثالإذا كان هناك الفاصلة المنقوطة أو بيان الأشكال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top