Ich experimentierte mit einem E-Mail-Python-Skript und fragte mich, ob es beim Schreiben eines Python-basierten E-Mail-Skripts weniger sicher ist, als wenn Anmeldeinformationen über das Internet gesendet werden, wenn man sich auf einer Webseite anmeldet? Im folgenden Skript, sind die Benutzer und geben Sie die clear?Python smtplib Sicherheit
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')
Eine Sache, auf die man achten sollte - und etwas von einem Nitpick - wenn man kein Schlüssel/Cert-Paar an startls übergibt, glaube ich nicht, dass es die SSL-Signierungskette validiert, was bedeutet, dass jemand einen gefälschten SSL-Server einsetzen könnte up und posion Ihre DNS und Sie könnten SSL mit ihnen verbinden und ihnen Ihre Anmeldeinformationen geben. Wie unwahrschein- lich dies auch sein mag, es lohnt sich, darauf hinzuweisen, dass ein Neckbeard, der einen Code-Review durchführt, Sie dafür belästigt. Standardmäßig initiiert Python eine SSL-Verbindung mit einem signierten oder unsignierten Zertifikat auf der Gegenseite. Praktisch während der Entwicklung, weniger beeindruckend in der Produktion. – synthesizerpatel
Um die Antwort von synthesizerpatel zu verdeutlichen, möchte ich bestätigen, dass das, was er beschreibt, ein Mann im mittleren Angriff ist und nicht unbedingt ein Angriff, bei dem Anmeldeinformationen aus dem obigen Skript von einem Benutzer erfasst und im Klartext gesendet werden (was einfach kochen bis zum Packet Sniffing). Ist das korrekt? – Kryptos
Wie wäre es mit dem Code, ein Keyfile und eine certfile einzuschließen, um den Angriff zu verhindern, wie von synthesizerpatel beschrieben? Ich sehe von http://docs.python.org/3.2/library/smtplib.html, dass es eingeschlossen werden kann, aber es gibt keine Beispiele. Und eine andere Frage. Wenn ich jede dieser Zeilen in einem Terminalfenster manuell eingegeben habe, welche Schicht des OSI ist das im Gegensatz zu einer Anwendungsebene, wenn ich E-Mails über einen Mail-Client wie Thunderbird sende. – Kryptos