사용자가 시스템에서 코드를 실행할 수있는 시스템에서 작업하고 있습니다. 코드가 샌드 박스 처리되는 동안, 나는 여전히 코드가 특정 문장, 특히 수입 코드를 사용하는지 알고 싶다. 이것은 플랫폼에 대한 지침에 위배되는 악의적 인 코드 나 코드를 빠르게 확인하는 데 사용됩니다. 코드는 나중에 사람이 검사하기 때문에 유일한 검사는 아니지만 최악의 경우를 자동으로 필터링하는 것이 좋습니다. .특정 문에 대한 파이썬 코드 확인
그래서 코드를 실행하지 않고 코드가 예를 들어 sys
(또는 sys
부분)을 가져 오는지 확인하는 것이 가장 좋은 방법일까요? 나는 그 코드를 검색하는 정규 표현식보다 나은/좋은 방법이 있기를 희망한다.
보너스 질문 : 더 복잡한 진술은 어떻습니까? 예를 들어 bar
모듈에서 foo
을 호출 하시겠습니까?
편집 : 이것은 보안에 관한 질문이 아닙니다. 코드 내에서 특정 문장을 찾는 것입니다. 내 의견보기. 이 사용자 코드는 사용자 샌드 박스 내에서만 실행되므로 자신의 샌드 박스를 망칠 수 있습니다. 그러나 코드가 '인증'되면 다른 사용자의 샌드 박스에서 실행될 수 있습니다. 인증되기 전에 확인해야합니다. 그리고 자동화 된 수표가 최악의 범죄를 발견 할 수 있다면 도움이 될 것입니다.
인간은 매우 포괄적 인 검사를해야합니다. 예를 들어'exec' 명령을 사용하여 여기에 구현 한 간단한 시스템을 찾을 수 있습니다. – Oliver
내가 틀릴 수도 있지만, 소스 파일을 텍스트 파일로 스캔하는 것 외에는 다른 방법을 생각할 수 없다 : 파이썬 인터프리터가 그들을 실행할 수있게하면, import 문과 모듈을 사용하기 전에 코드를 인트로 로그 할 수 없다. 레벨 함수가 실행되었습니다 ...하지만 문제의 일부가 누락 되었습니까? – mac
@Oliver ... 여전히 ... 심지어 코드가 난독 화되면 (예 : 절인/압축/rot13 등) – mac