2013-07-05 2 views
2

IMAP받은 편지함을 지우는 데 도움이되는 스크립트를 작성하려고하는데 암호에 문제가 있습니다. 즉, 일반 텍스트에 액세스해야하는 서버에 대한 액세스 권한을 얻는 것입니다. 확인해 봤는데 메일 서버가 MD5를 사용 가능한 방법으로 표시하지 않습니다 (그렇지 않으면 IMAP4.login_cram_md5을 사용할 수 있음). 일반 텍스트 암호없이 서버에 액세스하려면 어떻게합니까?Python을 통한 IMAP 액세스를 위해 암호를 일반 텍스트로 저장하지 마십시오.

답변

3

인증 방법을 확인할 수 있습니다 (내가 안전하지 않은 연결을 원할 경우 IMAP4_SSL을 사용하고 IMAP4을 사용합니다.하지만 선택 사항이있는 경우 비 SSL 연결을 사용하지 않는 것이 좋습니다).

import imaplib 
imap_server = imaplib.IMAP4_SSL("imap.server.com") 
print "\n".join(i for i in imap_server.capabilities if i.startswith("AUTH=")) 

그러면 선택한 방법에 따라 imap_server.authenticate()에 전달할 수있는 인증 개체를 쓸 수 있습니다. This bug report에는 사용 사례가 있고 this SO question은 Gmail에 OAuth를 통해 인증하는 사람을 표시합니다.

서버가 일반 텍스트 암호 이외의 인증 방법을 제공하지 않거나 지원할 수 없거나 지원하지 않으려는 경우 일반 텍스트를 복구 할 수있는 형식으로 암호를 저장하는 것은 안타깝게도 불가피합니다. 어떤 형태로 암호화 할 수 있습니다 (예 : PyCrypto을 사용하는 AES, 예 : here). 매번 사용자에게 메시지를 표시하지 않으려면 암호화 키가 여전히 저장됩니다 (암호를 입력하라는 메시지가 표시 될 수도 있습니다). 어쨌든). Base64 인코딩과 같은 사소한 난독 화를 제안 할 것입니다. 코드를 보면서 누군가가 멍청하게 쳐다 보지 못하도록하거나 암호를 명확하게 보지 못하게하는 것입니다.

편집 : 명백한 또 다른 점은 일반 텍스트 암호를 저장해야 할 필요가없는 경우 절대 읽을 수 있어야하는 파일에 저장하지 않는 것입니다. 예를 들어, 전역 변수 나 그와 비슷한 다른 모든 설정을 가진 빠른 스크립트 일지라도 스크립트에서 절대 하드 코딩하지 마십시오. 암호가 별도의 파일에 있는지 확인하고 필요에 따라 OS 관련 권한을 제한 할 수 있습니다.

+0

그건 내가 두려웠다. 도와 주셔서 감사합니다! –

+0

대단히 반갑습니다. 더 나은 해결책을 찾지 못해 죄송합니다. 나는 패스워드를 소스 코드에서 지키는 것에 대한 나의 대답을 고칠 뿐이다 (명백 할 수도 있지만, 내가 생각할만큼 충분히 중요 할 것이다). – Cartroo

+0

감사합니다. 나는 이미 지금하고있다. 가장 좋은 방법은 무엇입니까 wrt. 이 파일들을 git repos에 넣는다. –

관련 문제