Meine Bewerbung ist Ruby-on-Rails, aber ich erwarte, dass Antworten auf diese Frage wahrscheinlich rahmenunabhängig sein werden.
Meine Anwendung sendet E-Mails über Google Mail SMTP mithilfe von Schienen ActionMailers a-la:
%Vor%Ok, das ist großartig ... da gibt es mein Passwort für Gmail im Klartext im Anwendungscode. Oder ich könnte es in der Datenbank im Klartext speichern. Offensichtlich sind beide nicht akzeptabel.
Salzen und Hashing, die übliche Technik wird hier nicht funktionieren, weil ich das Passwort an Google Mail senden muss.
Welche Strategien gibt es also, um ein Passwort für einen Drittanbieter-Dienst zu sichern?
Letztendlich gehören Benutzername und Passwort nicht einmal zu mir, sie gehören dem Endanwender der Anwendung.
Der SMTP-Server von Google Mail unterstützt zwei Authentifizierungsmechanismen: PLAIN und XOAUTH. Der PLAIN-Mechanismus erfordert, dass Sie das Klartext-Passwort des Benutzers kennen, und ich bin froh, dass Sie nicht bereit sind, diese zu speichern.
Sehen Sie sich das Protokoll OAuth an, das von Google Mail verwendet wird. Ich habe es noch nie benutzt und ich habe gerade herausgefunden, dass Gmail es für SMTP unterstützt, also kann ich nicht weiter helfen, aber ich würde sagen, dass genau das ist, was Sie wollen. OAuth ist eine Möglichkeit für einen Dienst (z. B. Google Mail), damit Drittanbieterdienste (wie z. B. Ihre) im Namen von Benutzern eine begrenzte Anzahl von Aktionen ausführen können, ohne sich mit ihrem Kennwort anzumelden.
Wenn die Anwendung privat ist, sollte dies keine Rolle spielen, aber ich vermute, dass es sich um eine öffentliche / Open-Source-Anwendung handelt.
Wenn das der Fall ist, fügen Sie ein Basisbeispiel dieser Datei als config / initializers / mail.rb.example hinzu und fügen Sie das echte Ding zu Ihrem .gitignore hinzu Datei, so dass es nie begangen wird. Danach fügen Sie der README Anweisungen hinzu, die Benutzer über die mail.rb.example -Datei nach mail.rb kopieren müssen, um die Anwendung funktioniert wie beabsichtigt.
Tags und Links ruby-on-rails-3 security ruby-on-rails encryption