2014-08-31 1 views
7

원하는 정규 표현식과 일치하는 문자열을 사용자가 입력하게하고 파이썬의 re.compile을 사용하여 일치하는지 확인합니다. 안전합니까? 특수하게 조작 된 문자열을 전달하여 악의적 인 사용자가 충돌하거나 원격 실행을 수행 할 수있는 방법이 있습니까?정규 표현식 보안

+2

사이드 노트로, 필요에 따라 본격적인 정규 표현식 대신 간단한 _glob_ 표현식을 고려해 볼 가치가 있습니다. 대부분의 사용자는 이해하기가 더 쉽습니다. 그리고 처리하는 데 훨씬 적은 전력이 필요합니다. 그러나 다시, 그것은 당신의 필요에 달려 있습니다 ... –

답변

9

나는 re.compile()이 문제가 될 것이라고 생각하지 않습니다. 물론 그것은 잘못된 정규 표현식으로 예외를 던질 수는 있지만 쉽게 잡을 수 있습니다. 파이썬 정규 표현식은 (예를 들어 Perl과 달리) 코드 콜 아웃을 허용하지 않으므로 공격자가 악성 코드를 정규식에 삽입하는 데 사용할 수있는 메커니즘을 보지 못합니다.

실제 정규식을 실행하는 것은 (re.search() 등을 통해) 문제가 될 수 있습니다. 왜냐하면 파이썬은 정규식의 런타임이 급증 할 수있는 catastrophic backtracking에 대한 예방 조치를 취하지 않기 때문입니다.

정규 표현식을 전용 프로세스로 실행하여 1 초 이내에 끝내지 않으면 죽이는 것이 좋습니다.