2013-05-22 70 views
5

我正在試驗電子郵件python腳本,並想知道在編寫基於python的電子郵件腳本時,與登錄到網頁時憑證通過互聯網發送時相比,它的安全性較差?在下面的腳本中,用戶是否通過清除?Python smtplib安全

import smtplib 
from email.mime.text import MIMEText 

GMAIL_LOGIN = '[email protected]' 
GMAIL_PASSWORD = 'amiexposed?' 

def send_email(subject, message, from_addr=GMAIL_LOGIN, to_addr=GMAIL_LOGIN): 
    msg = MIMEText(message) 
    msg['Subject'] = 'Test message' 
    msg['From'] = from_addr 
    msg['To'] = to_addr 

    server = smtplib.SMTP('smtp.gmail.com',587) 
    server.ehlo() 
    server.starttls() 
    server.ehlo() 
    server.login(GMAIL_LOGIN,GMAIL_PASSWORD) 
    server.sendmail(from_addr, to_addr, msg.as_string()) 
    server.close() 

if __name__ == '__main__': 
    send_email('testing email script', 'This is a test message') 
+2

有一點需要注意 - 而且有點挑剔 - 如果你沒有通過密鑰/證書對來啓動,我不認爲它驗證了SSL簽名鏈,這意味着有人可以放置一個假的SSL服務器你的DNS和你的DNS可以連接到SSL,並給他們你的憑據。不過不太可能,這可能是值得指出的,因爲執行代碼審查的挑逗會讓你失望。默認情況下,Python只會啓動一個帶有簽名或未簽名證書的SSL連接。在開發過程中方便,在生產中不太棒。 – synthesizerpatel

+0

爲了澄清synthesizerpatel的回覆,我想確認他描述的是一箇中間人攻擊的人,而不一定是一個用戶從上面的腳本獲取憑證並且以明文形式發送登錄信息的攻擊歸結爲數據包嗅探)。那是對的嗎? – Kryptos

+0

此外,包含keyfile和certfile以防止由synthesizerpatel描述的攻擊的代碼是什麼?我從http://docs.python.org/3.2/library/smtplib.html看到它可以被包含但沒有例子。還有一個問題。如果我在終端窗口中手動輸入這些行中的每一行,那麼如果我通過諸如thunderbird之類的郵件客戶端發送電子郵件,OSI的哪一層就是應用層。 – Kryptos

回答

4

這完全取決於如何建立TLS連接。如果你需要有效的證書(我相信如果遇到一個不信任的證書,你的startTLS方法會拋出一個異常(我不確定你應該驗證這個))。但考慮到您正在設置TLS,並通過TLS連接發送所有內容,所有內容都應加密。這意味着您的密碼,用戶名,甚至您的郵件和收件人都將以純文本形式發送。

因此不,您的用戶名和密碼不發送清除