2010-07-14 4 views
4

기본 기능을위한 소스 코드를 데이터베이스에 저장하고 관리 인터페이스를 통해 수정해야합니다. 이 코드는 여러 개의 숫자와 문자열을 매개 변수로 취해 번호 또는 없음을 반환합니다. 나는 eval이 악의적 인 것을 알고 있으므로 Python의 아주 기본적인 하위 집합을 실행하거나 Python 기반 웹 응용 프로그램 내에서 적어도 문법적으로 비슷한 것을 실행하는 안전한 방법을 구현해야합니다.python의 하위 집합을 안전하게 실행하려면 어떻게해야합니까?

확실한 대답은 DSL을 구현하는 것입니다. 그러나 이에 대한 경험이 없으며 어디서부터 시작해야할지 전혀 알지 못하고 사용 가능한 많은 리소스가 내 머리 위로 조금씩 이동하는 것처럼 보입니다. 어쩌면 거기에 이미 데이터베이스의 문자열에서 안전한 파이썬 호출 가능한 함수를 생성 할 수있는 뭔가가 이미있을 것이라고 기대하고있다. 언어는 할당, 기본 수학, if/else 및 대소 문자를 구분하지 않는 문자열 비교를 지원하기 만하면됩니다. 다른 모든 기능은 보너스이지만, 대부분의 일은 복잡한 데이터 구조, 클래스, 함수 등에 대한 필요성없이 수행 될 수 있다고 생각합니다.

현재 존재하지 않는 경우, 하나를 창조 할 수있는 가능성이 있지만, 내가 말했듯이, 어떻게 그것에 대해 갈 생각이 없다.

답변

1

관련된 표현이 너무 복잡하지 않아야 DSL을 구현하는 데 Pyparsing을 사용할 수 있습니다 (자세한 내용은 제공하지 않지만 요구 사항은 매우 간단 함을 의미 함). 구체적으로 fourFn.py 또는 simpleCalc.py을 포함하여 examples page을 참조하십시오.

+0

이것은 가장 좋은 제안처럼 보이고 simpleCalc는 필자가 필요로하는 일부 *를 지원하지만 DSL도 대소 문자를 구분하지 않는 문자열 비교와 일종의 if/else 블록을 지원해야합니다. – Andre

+0

유사한 줄에 따라 http://waxeye.org와 같은 것이 Python AST에 들어 가지 않으면 조금 더 멀리 갈 수 있습니다. 그것을위한 문서의 예제를 참조하십시오. 미니 언어를 실제로 실행하기 위해 자신 만의 코드를 작성해야하지만, 패키지 나 다른 일부 계산기 예제 중 하나에서 확장하기에는 너무 어려워 보이지 않는 것으로 들립니다. –

1

제한된 Python 환경은 실제로 만들기가 어렵습니다.

어쩌면 lua 같은 일이 더 잘 맞는에 대한 당신

그런 다음 나무는 하위 집합 만 사용 검사를 걸어 추상 구문 트리에 파이썬 코드를 구문 분석 ast 모듈을 사용하여 파이썬의 하위 집합을 구현할 수
+1

심지어 귀도도 파이썬을 제한하는 것이 어렵다는 것을 인정합니다. http://neopythonic.blogspot.com/2009/03/capabilities-for-python.html –

0

당신이 허용하는 파이썬. 이것은 파이썬 2.x에서 작동합니다. 파이썬 3은 ast 모듈을 제거했기 때문입니다.

그러나이 방법을 사용해도 가장 무해한 코드라도 사용자가 응용 프로그램을 파괴 할 수있는 무언가를 쓸 수 있기 때문에 100 % 안전성을 갖는 무언가를 만드는 것은 어려울 것입니다. 사용 가능한 것보다 더 많은 메모리를 할당하거나 모든 CPU를 사용하여 무한 루프에 프로그램을 넣는 것입니다.

+0

이 솔루션은 또한 흥미롭고 효과가 있습니다. 내 유일한 문제는 pyparsing과 같은 기본 거부 대신 기본 허용 정책을 사용합니다. – Andre

2

PySandbox 도움이 될 수 있습니다. 나는 그것을 테스트하지 않았으며 다른 곳에서 링크 된 것을 발견했다.

관련 문제