Похоже, вы нуждаетесь в просмотре исходного кода. Doxygen является отличным инструментом для обобщения практически всех аспектов C-проекта. (и многие другие языки). Это OpenSource, и его легко скачать. Кроме того, список функций является обширным.
eval()
позволит вредоносным данным скомпрометировать всю вашу систему, убить вашу кошку, съесть вашу собаку и заняться любовью с вашей женой.
Недавно была тема о том, как безопасно делать подобные вещи в списке python-dev, и были сделаны следующие выводы:
Начните здесь, чтобы прочитать о проблеме: http://tav.espians.com/a-challenge-to-break-python-security.html
Что Ситуация вы хотите использовать eval () в? Вы хотите, чтобы пользователь мог выполнять произвольные выражения? Или вы хотите каким-то образом передавать данные? Возможно, можно каким-то образом заблокировать вход.
Вы можете добраться до os
с помощью встроенных функций: __import__('os')
.
Для python 2.6+ может помочь модуль ast ; в частности ast.literal_eval
, хотя это зависит от того, что именно вы хотите оценить.
Обратите внимание, что даже при передаче пустых словарей оценке () это все еще возможно к segfault (C) Python с некоторыми приемами синтаксиса. Например, попробуйте это на своем интерпретаторе: eval("()"*8**5)
Возможно, вам лучше перевернуть вопрос:
Например, если вы хотите позволить пользователю вводить алгебраическое выражение для оценки, рассмотрите возможность его ограничения именами букв, чисел и определенного набора операторов и функций. Не проверяйте строки (), содержащие что-либо еще.
Есть очень хорошая статья о небезопасности eval()
в учебнике Марка Пилигрима "Погружение в Питон".
Цитата из этой статьи:
В конце концов, можно безопасно оценить недоверенные выражения Пайтона, для некоторого определения "безопасного", что оказывается не очень полезным для реальная жизнь. Ничего страшного, если ты просто играешь, и ничего страшного, если ты только передайте ему доверенные данные. Но всё остальное просто просит проблема.