![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 31.03.2008
Beiträge: 3
|
Hallo! Ich habe bisher nur sehr wenig mit PHP gemacht, daher würde ich gerne sicher sein, ob diese Überlegung richtig ist: Ich habe ein PHP-Skript, das Login-Daten eines Benutzers prüft. Es werden also Name und Paßwort entgegengenommen und diese mit einer Liste verglichen. Und genau um diese Liste geht es. Der Inhalt sollte unter keinen Umständen einsehbar sein. Daher habe ich diese Daten in eine Datei geschrieben und diese außerhalb des WWW-Bereichs auf dem Linux-Server gespeichert. Soweit ich weiß, kann man von außen nicht auf Dateien zugreifen, die nicht im Public-HTML-Verzeichnis eines Apache-Servers liegen. Daher sollten die Daten in dieser Datei absolut sicher sein?!? Oder gibt es Möglichkeiten, so etwas zu umgehen und ich sollte das lieber anders machen? Es dürfte doch nicht möglich sein, die Daten, die ein PHP-Skript intern einliest, von außen einzusehen? Vielen Dank und viele Grüße, Holger |
| | |
| | Nach oben #2 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 306
|
Speicher lieber nur einen Hash des Passworts ab (One-Way-Verschlüsselung). Siehe dazu z.B. http://php.net/md5
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
| | Nach oben #3 |
| Neuer Benutzer Registriert seit: 31.03.2008
Beiträge: 3
|
Hallo, das mach ich für das Paßwort, aber mir geht es auch darum, daß gar keine Daten aus dieser Datei zugänglich sind, denn die "Login-Namen" sind Email-Adressen. Deshalb die Idee, alle wichtigen Daten an einem Platz aufzubewahren, an dem sie nicht zugänglich sind. Geht das? Viele Grüße, Holger |
| | |
| | Nach oben #4 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 306
|
Am erwähnten Ort sind sie vor Zugriff via Web-Server grundsätzlich sicher. Du könntest noch eine .htaccess-Datei mit dem Inhalt "Deny from all" anlegen, falls mal was falsch konfiguriert ist. So könntest du die Datei übrigens in einem eigentlich zugänglichen Unterordner von public-html platzieren
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
| | Nach oben #5 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
|
Hallo Holger. Ja, das sollte so passen, falls dein Provider nicht gepfuscht hat. Mögliche Lücken sehe ich spontan hier: - Durch falsch gesetzte Rechte können andere Kunden auf dem Server auf die Datei zugreifen; - Die Datei liegt noch innerhalb eines weiteren doc_root; - Ein öffentlicher (öffentlich lesbarer) FTP-Zugang; - Ein PHP-Skript, das die Daten bei Übergabe ungünstiger Parameter ausgibt; Basti Geändert von Basti (31.03.2008 um 22:01 Uhr) |
| | |
| | Nach oben #7 |
| Der Student Registriert seit: 03.01.2007 Ort: München
Beiträge: 86
|
Theoretisch kannst du die Email auch mit md5() verschlüsseln, dann hast du immer nur ein paar aus zwei Hashes! Dann kannste beide vergleichen aber die Daten nicht erkennen.
__________________ Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de |
| | |
| | Nach oben #8 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
|
Allerdings - so habe ich es gelernt - ist md5() für die Verschlüsselung von Passwörtern weder gedacht noch geeignet. Da md5() einen ultimativ repräsentativen Hash errechnet, ist er - zum Beispiel - dafür gedacht, Fehler bei einem Dateitransfer über ein Netzwerk zu entdecken. Die ultimative Repräsentativität (also, dass er bei allen md5()-Aufrufen gleich ist) macht ihn allerdings leider für Rainbow Tables angreifbar. Die Funktion crypt() hingegen ist genau für den Einsatz bei Passwortverschlüsselung konzipiert und bringt einen weiteren Faktor zum Hash-Errechnen mit: den Salt. Damit unterscheidet sich je nach gewähltem Salt das Ergebnis, was zur Folge hat, dass für jedes mögliche Salt eine eigene Rainbow-Table angelegt werden müsste. Ich persönlich bevorzuge diesen Algorythmus zum Erstellen eines PW Hashes: PHP-Code: Der Witz liegt dabei darin, dass der Salt immer an den Anfang des verschlüsselten Strings gehängt wird und man zum Vergleichen einfach den verschlüsselten String selbst als Salt benutzen kann, denn je nach Verschlüsselung werden nur die ersten x Zeichen als Salt benutzt. Mein Vergleich sieht daher so aus: PHP-Code: Jojo
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
| | |
| | Nach oben #9 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
|
sha1() und md5() kannst du auch salzen, was spricht dagegen? Und, wenn bei jedem Aufruf der Verschlüsselung (durch dein System) nicht der gleiche Hash bei rauskäme, wäre das ganze Verfahren ziemlich unsinnig. Basti |
| | |
| | Nach oben #10 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Hash != Verschlüsselung. bei einem Hash wird nur ein Weg unterstützt, nämlich der vom Ursprungstext zum Hash. Zurück geht es nicht und zwar aus einem sehr einfachen Grund: Alle gängigen Hash-Algorithmen können nie garantieren, dass der Hash eindeutig ist. So kann "a" und "b" zum gleichen Hash führen mit der Auswirkung, dass "b" als Passwort akzeptiert würde, selbst wenn der ursprüngliche User "a" eingetippt hat. Und da könnt ihr noch soviel salzen, wie ihr wollt. Vergesst es. Hashes sind unsicher, gesalzen oder nicht.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #11 |
| Der Student Registriert seit: 03.01.2007 Ort: München
Beiträge: 86
|
Was allerdings auch wieder irgendwo egal ist. Wenn es jemand darauf abgesehen hat einen Hash zu knacken und per Brute Force alle Passwörter ausprobiert ist es egal ob er jetzt das richtige oder eine "alternative" findet. Und bei md5() tretten Kollisionen bei den normalen Passwort konstellationen nicht auf. Wenn das Passwort jetzt noch mit nem Salt zusammen gehasht wird gibt es dafür auch keine Rainbow Tables. Fürs Web sollte das eigentlich ausreichen! Vor allem in der Hinsicht dass falls jemand an deine ganzen Passwörter die per crypt verschlüsselt sind heran kommt, dann wird er wohl genauso an den Salt mit dem die Passwörter verschlüsselt sind heran kommen! Und dann ist das ganze noch gefährlicher.
__________________ Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de |
| | |
| | Nach oben #12 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
|
Ich schnalls nicht so recht: crypt() benutzt auch ausschließlich Einweg-Verschlüsselungs-Verfahren. Es geht doch hier garnicht um den Vergleich von Verschlüsselung vs. Prüfsummen. Ein Hash, der mit deinem salt erstellt wurde bringt dir nichts, wenn du das Salz nicht kennst (z.B. wenn jemand lesenden Zugriff auf die Datenbank hat, nicht aber auf das Dateisystem in dem der salt gespeichert ist). Kennst du allerdings das Salz auch, kannst du daheim in aller Ruhe versuchen, einen Treffer zu landen und musst damit nicht das Zielsystem penetrieren. Basti |
| | |
| | Nach oben #13 | |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
| Zitat:
Natürlich kann man md5 salzen, macht aber kaum einer. Crypt() hingegen zwingt dem Benutzer dieses Verfahren auf. Daher ist es vom Prinzip her sicherer. @mepeisen Ich habe von crypt() nicht als Mehrwegeverschlüsselung gesprochen. Latürnich ist es auch eine Ein-Weg-Verschlüsselung. Wobei natürlich die Frage auftritt, ob eine Verschlüsselung per Definitionem wieder zangsweise entschlüsselt werden können muss.
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int | |
| | |
| | Nach oben #14 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Das Problem ist, dass Verschlüsselung ein allgemeiner Begriff ist, also prinzipiell eine "Verfälschung" eines Inhalts. Du kannst auch den Inhalt Zeichen für Zeichen als Hex-String ausgeben. Sowas kann man auch Verschlüsselung nennen, obgleich die sehr plump ist. Das gefährliche daran ist die Annahme, dass eine Verschlüsselung immer eindeutig sein muss bzw. ist das die weitverbreitete Meinung. Im Prinzip will man doch, dass man eine eindeutige Passwort-Prüfung hat und dass man - für den Fall eines Einbruchs ins System - die Daten sicher hat. Beides zusammen geht nicht mit einem einfachen Hash. Gut, den Salt müsste man wissen, um schnell ne Rainbow Table an die Hand zu kriegen. Aber muss man den wirklich kennen? Wie wird eine Rainbow-Table errechnet? Nicht durch Trial and Error sondern durch Reverse Engineering des Hash-Algorithmus. Und da lassen sich jederzeit Salts mit einbeziehen. Wenn die normale Rainbow-Table nicht funktioniert, kann man den möglichen Salt errechnen und je mehr Passwörter man probiert, desto eindeutiger wird er bis nur noch einer übrig bleibt. Fakt ist, dass es ziemlich leicht ist, den Salt herauszufinden, selbst wenn man die Datei mit den verschlüsselten Passwörtern nicht zur Hand hat. Das ist dann eine Mischung aus Rainbow-Tables und Bruteforce. Aber mal zurück zur Ausgangssituation. Man will die Passwörter verschlüsseln (im ursprünglichen Sinn des Wortes), damit für den Fall eines Angriffs das ganze nicht weiter schlimm ist, will aber dadurch auf der Webseite nicht Tür und Tor öffnen. Die Lösung ist simpel: Für jeden User einen eigenen zufälligen Salt nehmen, der sich aus einer in der DB gespeicherten Random-Zahl ergibt. Selbst wenn man dann zufällig für User X ein Passwort findet, das passt und damit auf eine Raindbow-Table und einen Salt kommen könnte, passt das plötzlich bei User Y nimmer. So ein Schutz reicht in meinen Augen.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #15 | |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
| Zitat:
Wenn kein Salt angegeben wird, generiert es doch einen zufälligen Oder ist das unsicherer als eine manuelle Salterzeugung?
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int | |
| | |
| | Nach oben #16 | |||||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
| Zitat:
Zitat:
Zitat:
Zitat:
Nicht, dass ich es deswegen schlecht reden will, aber diese Massnahme für den Fall, dass ein Angreifer bereits zumindest teilweise ins System eingestiegen ist fällt dann eben in die Kategorie Schadensbegrenzung. Zitat:
Basti Geändert von Basti (02.04.2008 um 17:49 Uhr) | |||||
| | |
| | Nach oben #17 | |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
| Zitat:
PHP-Code: //edit: Latürnich bringt es nix, wenn man auf dem anderen System nicht auf die Verschlüsselung achtet. Da gebe ich dir recht.
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int | |
| | |
| | Nach oben #18 | ||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
| Zitat:
Basti | ||
| | |
| | Nach oben #19 | |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 403
| Zitat:
Ich wollte lediglich wissen, ob es einen Vorteil birgt, wenn man die Salts separat speichert. Denn das Salt wird sowieso vorne an den Verschlüsselten String gehängt. Wenn man auf einem anderen System arbeitet und eine andere Verschlüsselung benutzt, dann bekommt man auch ein Problem, wenn man die Salts separat ablegt. Maximal könnte man überprüfen, ob die falsche Verschlüsselung aktiviert ist. Einen Algorithmus wollte ich damit gar nicht verbessern. Wenn überhaupt verkürzen.
__________________ In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int | |
| | |
| | Nach oben #20 | |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
| Mit einer eindeutigen Verschlüsselungsmethode. Was weiss ich. SSL. Gibt aber auch einfachere. Klar hat man implizit dann ne Verschlüsselung, die zwei Wege unterstützt, die man also bei richtigen Informationen wieder zurückrechnen kann zum ursprünglichen Wert. Zitat:
Wenn man etwas Ausdauer mitbringt und Bot-Netzwerke tun dies teilweise, kann man das ganze bereits ohne vorher ins System eingedrungen zu sein. Und Tools, die unter Einbeziehen von Salts auf gängige Hash-Algorithmen ne Rainbow-Tabelle zurückrechnen, gibt es ebenfalls. Die Frage ist natürlich, inwieweit ein Angreifer sich generell für eine private Homepage interessiert mit vielleicht 20 Usern. Von daer gebe ich dir mal recht. Aber man sollte trotzdem nicht zu blauäugig durchs Leben gehen. Mein neues Projekt hat exakt 6 User registriert. Es erzeugt derzeit etwa 20 Visits am Tag. Und Bots haben die bereits merhfach abgegrast, immer mal was anderes, immer mit dem Ziel, irgendwie ins System zu kommen, um Spam zu verbreiten. Das stimmt einen u.U. bedenklich.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html | |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| große Datei öffnen | Jann Hendrik | Tools, Server, Betriebssysteme | 13 | 05.05.2008 07:47 |
| Datei über FTP-Funktionen erstellen | Jan | PHP-Programmierung | 1 | 08.03.2007 20:36 |
| Mit Applet Datei per ftp uploaden | Tago | Desktop-Applikationen und Grafik | 3 | 09.09.2005 18:17 |
| Textausgabe in Datei | obiwankenobi | Allgemeine Java-Programmierung | 2 | 09.05.2005 12:51 |
| Java findet Datei nicht | Niki_Tesla | Allgemeine Java-Programmierung | 14 | 14.12.2004 22:31 |