2013-05-22 9 views
5

Eksperymentowałem z pocztowym skryptem python i zastanawiałem się, czy podczas pisania skryptu e-mail opartego na pythonie jest on mniej bezpieczny w przeciwieństwie do wysyłania poświadczeń przez Internet podczas logowania do strony internetowej? W poniższym skrypcie, jesteś użytkownikiem i przekazujesz jasne?Python smtplib security

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

Jedną z rzeczy, na którą należy zwrócić uwagę - i nieco szarpnięcia - jeśli nie przekazujesz pary kluczy/certyfikatów do starttli, nie sądzę, aby to potwierdzało łańcuch podpisywania SSL, co oznacza, że ​​ktoś mógłby umieścić fałszywy serwer SSL up i podaj swoje DNS i możesz połączyć się z nimi SSL i dać im swoje poświadczenia. Jest jednak mało prawdopodobne, że warto o tym wspomnieć, jako że szyja, wykonująca przegląd kodu, zrobi to za Ciebie. Domyślnie Python po prostu zainicjuje połączenie SSL z podpisanym lub nie podpisanym certyfikatem na zdalnym końcu. Wygodny podczas programowania, mniej niesamowity w produkcji. – synthesizerpatel

+0

Aby wyjaśnić odpowiedź synthesizerpatel, chcę potwierdzić, że to, co opisuje, jest człowiekiem w środku ataku, a niekoniecznie atakiem, w którym dane uwierzytelniające zostały przechwycone z powyższego skryptu przez użytkownika, a login został wysłany w przejrzysty sposób (który byłby po prostu sprowadzić do wąchania pakietów). Czy to jest poprawne? – Kryptos

+0

Co to jest kod zawierający plik klucza i plik certfile, aby zapobiec atakowi opisanemu przez synthesizerpatel? Widzę z http://docs.python.org/3.2/library/smtplib.html, że można go dołączyć, ale nie ma przykładów. I kolejne pytanie. Jeśli ręcznie wprowadziłem każdą z tych linii w oknie terminala, to jaka warstwa OSI jest tym, co w przeciwieństwie do warstwy aplikacji, jeśli wysyłam pocztę za pośrednictwem klienta pocztowego, takiego jak thunderbird. – Kryptos

Odpowiedz

4

To całkowicie zależy od konfiguracji połączenia TLS. Jeśli wymagane są poprawne certyfikaty (wydaje mi się, że w przypadku napotkania certyfikatu, który nie jest zaufany, metoda startTLS zgłasza wyjątek (nie jestem pewna, czy należy zweryfikować to)). Ale biorąc pod uwagę, że konfigurujesz TLS i przesyłasz wszystko przez połączenie TLS, wszystko powinno być zaszyfrowane. Oznacza to, że twoje hasło, nazwa użytkownika, a nawet twoja wiadomość i adresaci nie zostaną wysłane w postaci zwykłego tekstu.

Tak więc nie, nazwa użytkownika i hasło nie są wysyłane wyczyść.