2010-12-14 3 views
3

Ich habe ein benutzerdefiniertes Authentifizierungssystem für CodeIgniter (Ich weiß, es gibt verschiedene 3rd-Party-Bibliotheken zur Verfügung, aber das ist zu meinem eigenen Vorteil), aber ich mache mir Sorgen, dass etwas offensichtlich fehlt, das könnte bringen das ganze Ding runter.CodeIgniter auth Sicherheitsmodell

Ich benutze CI-Sitzungen (über die Datenbank) und verschlüsseln Cookie-Werte für ein wenig wahrscheinlich sinnlose Verschleierung. Logins erfolgen über SSL (und Cookies werden nur als Sicherheit modifiziert). Ich benutze auch phpass, um Kennwörter für den Speicher zu hashen, obwohl das hier nicht wirklich relevant ist. Es kann irgendwo in diesem Teil ein schwaches Glied sein, aber meine größte Sorge ist, dass die Seite-an-Seite prüft grundsätzlich aus einem Ansatz if is_logged_in = true Art besteht zusammen mit ihren Benutzername in der Sitzung. Dieses Bit interessiert mich, da es ein bisschen zu leicht erscheint. Ist dieser Ansatz ziemlich anfällig? Sollte ich einen seitenweisen Hash-Wert von, sagen wir, User-Agent oder was auch immer berechnen und sicherstellen, dass sie übereinstimmen?

Alle Hinweise würden die meisten geschätzt werden. Wie ich schon sagte, ich kenne bereits existierende Lösungen, aber ich versuche, hier etwas zu lernen :)

Antwort

3

Alles, was Sie erwähnt haben, ist gut. Ich kenne Phpass jedoch nicht. Stellen Sie sicher, dass Sie beim Hashing der Passwörter ein Salz verwenden.

Eine Überprüfung if_logged_in = true ist ausreichend, da Sitzungsdaten serverseitig gespeichert werden. Der Grund für die Überprüfung von Dingen wie dem User-Agent ist der Schutz vor Session-Hijacking, bei dem eine Person die Sitzungs-ID einer anderen Person erhält.

+0

+1 für das Versenden des Passworts –

+0

phpass macht Salz und dann Hashes mit bcrypt. Session Hijacking ist ein guter Punkt.Ich weiß, dass CI den Benutzer-Agenten in der Sitzungs-DB verfolgt, aber ich bin mir nicht sicher, was es damit macht. Es lohnt sich einchecken! – Toast

2

PS: ich kein Sicherheitsexperte bin so System Ich ziehe mit, die von Sicherheitsexperten geprüft werden: OpenID, Facebook verbinden, twitter (oauth), signin Google, etc

Aber hier ist meine Checkliste (Ich kann nachdenken):

  • Verwenden Sie SSL, um sicherzustellen, dass niemand Ihr Kennwort lesen kann, wenn über die Leitung gesendet.
  • sollten Sie sanitize alle Ihre Eingabe ($ _ POST, $ _GET, $ _SERVER, usw.). Wenn es sich nicht um eine lokale Variable handelt, sollten Sie vorsichtig sein. So sollten Sie zum Beispiel $_SESSION['is_logged_in'] mit diesem Filter sterilisieren =>$var = filter_var($_SESSION['is_logged_in'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);AGAIN Sie sollten das für alle Eingabe tun, die vom Server kommt, weil sie nicht sicher sind. Der beste Ansatz besteht darin, eine Whitelist anstelle einer Blacklist zu verwenden. Weil es eine Chance gibt, dass Sie etwas verpassen werden.
  • Verwenden PDO Risiko von SQL-Injektion zu minimieren.
  • Bewahren Sie Ihre Passwörter nicht im Klartext in der Datenbank, aber hash sie. Immer noch riskantes Geschäft, denke ich. Weil Gawker/Lifehacker in letzter Zeit kompromittiert wurde (fragt sich, wie es passieren könnte?). Ich denke, Ihr phpass ist ziemlich solide, weil owasp es auch empfiehlt.
  • Seien Sie für XSS-Angriffe bewusst ab. Ist bereits getan, weil der Eingang desinfizierende
  • Maßnahmen gegen CSRF. Dies kann auch sehr gefährlich sein, wenn Sie zum Beispiel die E-Mail-Adresse ändern können, wenn der Benutzer angemeldet ist. Der nächste Schritt besteht darin, eine E-Mail zu senden, um Ihr Passwort zurückzusetzen, und Ihr System ist eingeschränkt.
  • +0

    Das ist alles gute Ratschläge. Ich möchte nur darauf hinweisen, dass Codeigniter bereits Eingaben bereinigt, indem er das eingebaute $ this-> input-> post-Objekt verwendet, activerecord, um die SQL-Injection zu minimieren und XSS-Filter eingebaut hat (ich bin mir nicht sicher, ob es standardmäßig aktiviert ist). – rrrhys

    +0

    Sie haben Recht damit. Ich habe in der Vergangenheit Codeigniter benutzt (als ich immer noch PHP-Entwicklung machte). Aber ich glaube nicht, dass Codeigniter CSRF-Schutz eingebaut hat? – Alfred

    Verwandte Themen