Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Anmeldung immer überprüfen?

Frage Entwicklung PHP

Mitglied: eeucalyptus

eeucalyptus (Level 1) - Jetzt verbinden

24.05.2010, aktualisiert 25.05.2010, 3694 Aufrufe, 12 Kommentare

hallo,

ich bin gerade dabei, ein Webportal zu schreiben.
Dabei habe ich eine Frage zum Anmelden, und zwar:

Sollte man jedes mal, wenn eine Seite geladen wird die Anmeldedaten aus der Datenbank abfragen, oder ist es sicher genug, wenn man das in denn Session-Daten speichert?

Vielen Dank schonmal, für eure Hilfe!

Eike
Mitglied: 1002-btl
24.05.2010 um 18:58 Uhr
Hallo,

es kommt immer darauf an, was für einen Sicherheitsstandard man haben will oder muss.

Eine Sessionvariable zusammen mit einer SSL-Verbindung ist sicherlich für viele Anwendungsfälle OK.

Lediglich ein Cookie zur Identifizierung zu verwenden ist erheblich unsicherer. (In älteren Programmierbeispielen wurde häufig so verfahren, dass im Cookie der Username abgelegt war).

Ich verwende z.B. für (allerdings nur internes Netzwerk) einen GUID als Cookie und eine Verknüpfung zur IP des Rechners, an dem sich der User angemeldet hat und speichere diese zur Identifizierung in einer Datenbank.
Eine Session kann ich nicht verwenden, da die Zugriffe oft zu lange auseinander liegen und die Session somit ablaufen würde. Da ist sicherlich noch kein Verfahren für Onlinebanking, aber für's Intranet reicht es eben aus.

Ein anderer Ansatz wäre, die Sicherheit schon auf der Ebene des Zugriffs zu implementieren (also keine anonymen Zugriffe zulassen).
Dann kümmert sich der Server um die Authentifizierung. Allerdings muss die Anwendung dennoch selbst die Autorisierung für einzelne Zugriffe (wahrscheinlich soll nicht jeder alles dürfen / Nutzer-Rollenprinzip) sicher stellen.

Vielleicht hilft Dir das ja ein wenig bei Deinen Überlegungen weiter.
Bitte warten ..
Mitglied: eeucalyptus
24.05.2010 um 19:11 Uhr
Hallo,

ich habe vor es ohne SSL laufen zu lassen(vor allem aus Kostengründen).
Es muss ja nicht so sicher sein, wie beim Onlinebanking. Allerdings wollte ich wegen der Zeit wissen, ob man nicht einfach den Usernamen und den Passwort-Hash in einer Session-Variable speichern kann, der dann sozusagen als "Ausweis" gilt.
Dann müsste man nicht jedes mal beim Seitenaufruf in der Datenbank nachschlagen, ob der Benutzer mit dem Passwort existiert.

Eike
Bitte warten ..
Mitglied: Multitask
24.05.2010 um 19:47 Uhr
Hallo.

Ich habe es bei einem Intranet-System genau so gemacht wie Du es beschreibst. Das PW steht mit MD5 behandelt in der DB. Beim Login abgeglichen und ein Cookie gesetzt. Bedenke aber, dass Du evtl. Schwierigkeiten mit der Gültigkeit der Session auf dem Server kriegen kannst. Wenn Du den Apache dann nicht selbst betreibst, musst Du bei Deinem Provider betteln gehen...

Grüße,

Mathias
Bitte warten ..
Mitglied: eeucalyptus
24.05.2010 um 20:24 Uhr
Das ist nicht das Problem, ich habe einen eigenen Server. Und wenn das mit der Sicherheit klar geht, dann mach ich dass so.

Vielen Dank für die Hilfe!

Eike
Bitte warten ..
Mitglied: Cubic83
24.05.2010 um 21:29 Uhr
Hallo,

wo liegt denn das Problem beim permanenten Abfragen? Die Datenverbindung wird ja vermutlich eh immer aufgebaut werden, und auf eine Query mehr kommst nicht an. Ich würde es nur mit permanenter Abfrage machen.

mfG
Bitte warten ..
Mitglied: Multitask
24.05.2010 um 21:50 Uhr
Wozu soll das gut sein? Das PW müsste in beiden Fällen auf dem Client gespeichert werden, schließlich soll der user doch sein PW nicht ständig eingeben müssen...
Bitte warten ..
Mitglied: Cubic83
24.05.2010 um 21:58 Uhr
Selbstverständlich muss man nicht bei jeder Seite das Password eingeben.

01.
 
02.
if ($_REQUEST['action'] == "LogIn") 
03.
04.
    $_SESSION['uname'] = $_REQUEST['username']; 
05.
    $_SESSION['pword'] = md5($_REQUEST['pword']; 
06.
07.
 
08.
$UserIsLogedIn = mysql_query("SELECT * FROM DB WHERE username='".$_SESSION['uname']."' and password='".$_SESSION['pword']."'); 
09.
 
Hier das Log In Formular:

01.
 
02.
<form action="./index.php?action=LogIn" method="post"> 
03.
<input type="text" name="username"> 
04.
<input type="password" name="pword"> 
05.
<input type="submit"> 
06.
</form> 
07.
 
Bitte warten ..
Mitglied: dog
25.05.2010 um 11:27 Uhr
Sollte man jedes mal, wenn eine Seite geladen wird die Anmeldedaten aus der Datenbank abfragen, oder ist es sicher genug, wenn man das in denn Session-Daten speichert?

PHP's eigener Session-Mechanismus ist "sicher".
Bevor man Anfängt selbst mit Cookies rumzufummeln sollte man sich in das Thema genau einlesen.

Ich wüsste auch nicht wie du bei jedem Aufruf der Seite die Anmeldedaten erneut abfragen willst, denn du löschst das Passwort wie jeder gute Programmierer natürlich sofort nach dem Login aus dem RAM, richtig?

Du könntest also höchstens jedes Mal die Meta-Daten abfragen und das ist einfach eine Design-Entscheidung.

Lediglich ein Cookie zur Identifizierung zu verwenden ist erheblich unsicherer

Richtig, aber Sessions ohne SSL sind heute Standardpraxis - diese Unsicherheit nimmt halt jeder für die alltäglichen Dinge in Kauf.
Wichtige Dinge wie Login, Kontodaten etc. kann man ja über SSL leiten.

Das PW steht mit MD5 behandelt in der DB

MD5 alleine darf nicht mehr verwendet werden, weil das erraten des Ausgangspasswort zu leicht ist. Korrekt wäre z.B.
md5(salt + username + password)

01.
if ($_REQUEST['action'] == "LogIn") 
02.
03.
    $_SESSION['uname'] = $_REQUEST['username']; 
04.
    $_SESSION['pword'] = md5($_REQUEST['pword']; 
05.
06.
 
07.
$UserIsLogedIn = mysql_query("SELECT * FROM DB WHERE username='".$_SESSION['uname']."' and password='".$_SESSION['pword']."');
Diser Code darf niemals und unter keinen Umständen verwendet werden.
Da stecken so viele Sicherheitslücken drin, dass es nur konsequent wäre den Autor mit dem Kopf zuerst einmal durch den Kies zu ziehen.
Bitte warten ..
Mitglied: Cubic83
25.05.2010 um 13:51 Uhr
Zitat von dog:
Diser Code darf niemals und unter keinen Umständen verwendet werden.
Da stecken so viele Sicherheitslücken drin, dass es nur konsequent wäre den Autor mit dem Kopf zuerst einmal durch den
Kies zu ziehen.


Wieso ist das unsicher? Ich schreibe meine Logins immer so. Ich sehe da nicht keine Lücke. Ich lerne aber gerne hinzu ;)
Bitte warten ..
Mitglied: Multitask
25.05.2010 um 14:07 Uhr
Du solltest zumindest die Benutzereingaben (Username, PW) überprüfen (SQL-Injection). Das kann übelst schiefgehen und Deine DB ist futsch. Fällt mir so als erstes ein. Ich würde aber auch noch die $_REQUEST['action'] validieren. Jedenfalls kannst Du die Benutzereingaben nicht einfach in die Session schreiben und sie im SQLStatement verwenden.
Bitte warten ..
Mitglied: Cubic83
25.05.2010 um 14:47 Uhr
Achso. Sollte ja nur Beispielhaft sein.

- mysql_real_escape_string() benutzen
- Und zusätzlich noch übeprüfen ob mehr als 20 Logins in den letzten 30 Minuten versucht worden
- md5(salt + username + password)

(wobei: was ist salt?)

Was fehlt denn da noch ums sicher zu machen.

Oder anders, wie überprüft ihr denn Logins?
Bitte warten ..
Mitglied: dog
25.05.2010 um 17:14 Uhr
Das Salt ist eine für deine Seite eindeutige Zufällige Buchstabenkombination.
Der Sinn ist folgender:

md5(password) => lässt sich mit einer Rainbow-Table für Passwörter erraten (einfach)
md5(user+password) => lässt sich nur für Benutzer+Passwort Rainbow-Tables erraten (wesentlich schwerer)
md5(salt + user + password) => für die Kombination wird es keine Rainbow-Tables geben, ein neu anlegen ist zu aufwendig (sehr sicher)

Das lässt aber außer acht, dass bei md5() bereits mehrere Kollisionen entdeckt wurden.

Abgesehen davon hat ein Passwort nie etwas in der Session zu suchen.
Nach dem Login muss es verworfen werden und fertig!

Und $_REQUEST sollte man nie benutzen.
Logins kommen per POST also wird doch auch nur $_POST akzeptiert.
$_REQUEST würde auch GET annehmen, womit man viele lustige Dinge machen kann...
Bitte warten ..
Ähnliche Inhalte
Windows 7
Netzwerkanmeldeinformationen überprüfen
Frage von HenereWindows 76 Kommentare

Hallo zusammen, auf einem meiner Laptops (Win7) kommt seit heute früh diese Meldung: Der Laptop ist in einem AD, ...

Windows Netzwerk
Netzwerk auf Treffic überprüfen
gelöst Frage von Kopfg3ldWindows Netzwerk1 Kommentar

Hallo zusammen, welche Hilfsmittel oder Tools gibt es um den Traffic zu beobachten, überwachen oder Fehlerquellen zu Analysieren und ...

TK-Netze & Geräte
Hausanschluss Breitbandkabelnetz überprüfen
gelöst Frage von whzfuxTK-Netze & Geräte5 Kommentare

Moin, ich habe eine Frage aus meinem privaten Bereich zum Thema Breitbandkabelnetz. Folgende Situation: Ich wohne in einer WG. ...

Batch & Shell
Powershell Pfad überprüfen
gelöst Frage von H41mSh1C0RBatch & Shell11 Kommentare

Hi @ PS Profis, Irgendwie seh ich den Wald vor lauter Bäumen nicht. (oder es ist einfach Zeit für ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 23 StundenBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Windows Store Apps
gelöst Frage von PeterleBWindows Server11 Kommentare

Gibt es einen Weg, auf Windows Server 2016 Windows Store Apps wie zum Beispiel die HP Smart App zu ...

Windows 10
Windows 10 RDP nicht mehr möglich
Frage von speedy-luisWindows 1010 Kommentare

Hallo zusammen, seit ein paar Tagen kann ich in unserem Netzwerk auf die Windows 10 PCs keine RDP-Session mehr ...

Microsoft
Erfahrungen mit Webcam over RDP gesucht
Frage von DerWoWussteMicrosoft10 Kommentare

Moin Kollegen. Bekanntlich kann man Webcams nur mit Drittanbietersoftware in RDP reinschleifen. Was nutzt Ihr dazu? Wie stabil funktioniert ...