2011-08-24 3 views
1

호스트 컴퓨터의 인터넷 포트를 열고 터미널에 표시되는 들어오는 메시지를 수신하는 매우 기본적인 파이썬 소켓을 고려하십시오.파이썬으로 포트를 여는 데 필요한 적절한 보안 조치는 무엇입니까?

이와 같이 포트를 넓게 열어 놓는 것은 상당히 위험한 것으로 간주됩니까? 맞습니까? 어떤 보안 기능을 구현해야합니까? 들어오는 데이터를 소독해야합니까? 이것에 대해 가장 좋은 방법은 무엇입니까?

감사합니다.

+3

지금까지 작성한 코드가 있습니까? 너는 무엇을 지나가고 있는가? 절대 위조하지 않는 데이터는 신뢰하지 마십시오. 민감한 내용은 암호화하십시오. 청취 포트를 가지는 것은 자체적으로 결함이 아니지만 의미있는 대답을 위해 더 많은 컨텍스트를 제공해야합니다. –

+0

와우 어떤 사람들은 단서가 없습니다. – rook

답변

6

왜 이것이 취약할까요? 프로그램은 임의의 사람들 (잠재적으로 인터넷 전체)과의 연결을 허용하고 터미널에 임의의 바이트를 표시 할 수있게합니다. 여기에는 오직 하나의 공격 벡터 만 있습니다 : 터미널 자체. 터미널에 버그 대신 바이트를 실행하면이 설정으로 인해 시스템이 손상 될 수 있습니다.

그러나 거의 불가능합니다. 실제로 프로그램이 완전히 파괴되지 않았는지 확인하기위한 일반적인 기술은 임의의 데이터를 전달하고 해당 데이터가 폭발하는 지 여부를 확인하는 것입니다. 이것은 fuzz testing이라고 불리며, 퍼즈 테스트를 할 때 터미널에 그러한 버그가있는 경우, 퍼지 테스트는 터미널 쓰레기가 아닌 흥미로운 폭발을 생성합니다.

포트에서 인터넷에 액세스 할 수 있다고해서 취약성이있는 것은 아닙니다. 실제 악용 가능한 결함이 필요하며,이 경우에는 아마 존재하지 않을 것입니다. (결코 알지 못하더라도)

+0

사실, 파이썬 스크립트 ['exec()'가 코드를 전송하지 않는 한, 당신은 괜찮을 것입니다. –

1

무엇을 보안하려고합니까? 파이썬 인터프리터가 알지 못하는 외음부를 가지고 있지 않다면, 파이썬을 사용하여 소켓에서 듣기 만해도 불의한 사람에게 직접 노출되지는 않습니다.

수신 메시지 처리는 다른 문제입니다.

터미널에 쓰는 경우 들어오는 데이터가 특정 형식이어야한다는 의미입니까? 들어오는 데이터를 어떻게 파싱합니까? 누군가가 당신의 포트에/dev/random 고양이를 태우고 멋지고 오랜 시간 동안 연결을 열어 둔다면 어떻게됩니까?

메시지의 순서 또는 내용이 중요합니까?

등등. 언급 할 시나리오의 구체적인 내용이 많지 않으므로 권장 사항이 모호합니다. 우선 일반적인 개념은 OWASP secure coding principles을 살펴보십시오 (HTTP 또는 HTML을 다루지 않아도 적용 가능합니다).

+0

하지만 인터프리터는 취약한 프로그램을 실행할 수 있습니다 ... – rook

+0

예, 그것이 "들어오는 메시지 처리"의 관점에서 구별되는 것입니다. 원래 게시물은 데이터가 소켓에 도착하여 터미널에 표시되는 코드 경로에서 너무 모호했습니다. – Mike

관련 문제