대부분의 현대 언어 (어떻게 해석되는)는 일종의 평가 기능을 가지고 있습니다. 이러한 함수는 임의의 언어 코드를 실행하며 대부분의 경우 주요 인수로 문자열로 전달됩니다 (다른 언어는 eval 함수에 더 많은 기능을 추가 할 수 있음).
나는 사용자가 (이 기능을 실행하도록 허용해서는 안 이해 편집 예에 전달 될 임의의 사용자로부터 직접 또는 간접적으로 임의의 입력을 받아 eval
들이 악성 코드를 실행하는 프로세스를 강제 할 수 있기 때문에, 특히 서버 측 소프트웨어). 그런 식으로, 튜토리얼과 커뮤니티는 eval을 사용 하지 말라고 말합니다 . 그러나 eval 이 유용하고 사용되는 경우가 많습니다 .
- 소프트웨어 요소에 대한 사용자 지정 액세스 규칙 (IIRC OpenERP에는
ir.rule
동적 파이썬 코드를 사용할 수 있는 개체 가 있습니다). - 사용자 정의 계산 및 / 또는 기준 (OpenERP에는 사용자 정의 코드 계산을위한 필드가 있습니다).
- OpenERP 보고서 파서 (예, OpenERP 관련 자료를보고 놀란다는 것을 알고 있습니다. 그러나 이것이 제가 가진 주요 예입니다).
- 일부 RPG 게임에서 주문 효과를 코딩합니다.
따라서 올바르게 사용되는 한 잘 사용됩니다. 주요 장점은 관리자가 더 많은 파일을 작성하지 않고 사용자 정의 코드를 작성하여 포함시킬 수 있다는 것입니다 (평가 기능을 사용하는 대부분의 프레임 워크에는 파일, 모듈, 패키지 등을 읽을 수있는 방법이 있지만).
그러나 대중 문화에서 평가는 악하다. 시스템 침입과 같은 것들이 떠 오릅니다.
그러나 언 링크, 읽기, 쓰기 (파일 시맨틱), 메모리 할당 및 포인터 산술, 데이터베이스 모델 액세스 (SQL 삽입 가능 사례를 고려하지 않더라도) 등 사용자가 액세스하는 경우 유해 할 수있는 다른 기능이 있습니다.
그래서, 기본적으로, 대부분의 시간에 임의의 코드가 기록되지 않습니다 제대로 여부를 지켜 제대로 (자원, 사용자, 환경, ...), 코드는 악하고도 경제적 효과로 이어질 수 있습니다.
그러나 eval
언어에 관계없이 함수 에는 특별한 것이 있습니다.
질문 : 위험 가능성이있는 다른 특징들에 대해 동일한주의를 기울이지 않고 대중 문화의 일부가되는이 두려움에 대한 역사적 사실이 있습니까?
eval
하는 내부 함수를 safe_eval
가지고 있습니다. 그러나 파이썬은 매우 유연한 언어이므로 제어하기 어렵 기 때문에 버그가 발견되었습니다.