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

PHP MySQL Login

Mitglied: Yanmai

Yanmai (Level 1) - Jetzt verbinden

12.11.2016 um 22:40 Uhr, 732 Aufrufe, 7 Kommentare

Hallo ihr Administratoren,
ich habe eine Datenbank, in der alle User des Netzwerkes enthalten sind. Wenn ein User sich einloggen will, dann soll PHP die Datenbank durchsuchen und das Passwort abgleichen. Wenn dies korrekt ist, soll eine Session Variable erstellt werden und eine neue Seite aufgerufen werden (<meta http-equiv="refresh" content="2; URL=seite2.php"/>). Die seite2.php enthält dann auch die Session und ruft anhand von dieser Variable dann den Username ab. Ich habe schonmal einen Ansatz:

01.
<?php
02.
session_start();
03.
$verhalten = 0;
04.

05.
   	$conn = mysqli_connect($servername, $username,$password,$database);
06.

07.
	if($conn)
08.
	{
09.
		if(!isset($_SESSION["username"]) AND !isset($_GET["page"])) {
10.
			if($_GET["page"] == "log") {
11.
				$CurrentUser = mysqli_real_escape_string($conn, $_POST["user"]);
12.
				$UserPasswort = mysqli_real_escape_string($conn, $_POST["password"]);
13.
				$sqlQuery = "SELECT passwort FROM `Benutzerliste` WHERE username='$CurrentUser'";
14.
				$result = mysqli_query($conn, $sqlQuery);
15.
				if($result)
16.
				{	
17.
					if(password_verify($UserPasswort, $result["passwort"]))
18.
					{
19.
						$_SESSION["username"] = $CurrentUser;
20.
						$verhalten = 1;
21.
					} else {
22.
						echo "Fehler";
23.
						$verhalten = 2;
24.
					}
25.
				}
26.
				else
27.
				{
28.
					echo "Error in SQL statement";
29.
					$vergessen = 2;
30.
				}
31.
			}
32.
		}
33.
	}
34.
?>
01.
<form method="post" action="mslogin.php?page=log">
02.
				<table cellpadding="20px">
03.
					<tr>
04.
						<td><font color="919191" size="+1" face="Calibri"><label>Benutzername:</label></font></td>
05.
						<td><input type="text" name="user"/></td>
06.
					</tr>
07.
					<tr>
08.
						<td><font color="919191" size="+1" face="Calibri"><label>Passwort:</label></font></td>
09.
						<td><input type="password" name="password"/></td>
10.
					</tr>
11.
					<tr>
12.
						<td colspan="2"><input type="submit" /></td>
13.
					</tr>
14.
				</table>
15.
			</form>
Der <meta refresh Teil befindet sich im header der Website. Wie kann man dieses Problem lösen? Es passiert im Moment nichts
Mitglied: BirdyB
12.11.2016 um 23:25 Uhr
Hi,
ich würde schonmal garkeine Passwörter direkt übertragen, sondern nur Hashes!!!
Und wieso der <meta>-Tag?

Beste Grüße!
Bitte warten ..
Mitglied: maretz
13.11.2016 um 09:39 Uhr
Moin,

zuerst mal würde ich ebenfalls dazu tendieren keine plain-Strings zu übertragen. Mit Escape ist zwar schon gut aber generell gibt es dafür keinen Grund (ok, https usw. wäre natürlich auch möglich).

Dann würde ich z.B. eine Abfrage machen wie "select xyz from abc where username LIKE "$username" AND password LIKE "$passwort"". Damit hast du schon mal einen Vergleich gespart - die DB muss eh vergleichen (den Usernamen), dann brauchst du nich 100.000 Ergebnisse noch mal vergleichen lassen (passwort).

Weiterhin würde ich die Felder im Quellcode nicht "user" und "password" nennen - dies macht heute jeder script-robot dann direkt als brute-force. Nenne die Felder halt "jubelju" und "halleluja" oder sonstwie. Dies schützt natürlich nicht vor einem Angriff, aber zumindest etwas ruhe vor den Skript-Kiddys die einfach nur ihr Script auf das Internet losjagen.
Bitte warten ..
Mitglied: kaiand1
13.11.2016 um 10:55 Uhr
Gegen Angriffe ist ja noch meist ein Script das die Abfragen zählt und wenn x Fehlerhafte/Anfragen in y Zeit erfolgen wird IP/User gesperrt Temporär was weitere Angriffe erschwert.
Zudem ist es auch nicht Optimal alles in Kekse zu schreiben die der Angreifer eh Manipulieren kann.
Bitte warten ..
Mitglied: Yanmai
13.11.2016 um 12:28 Uhr
Vielen Dank erstmal für die Antworten

In der Datenbank werden nur gehashte Passwörter gespeichert. Wenn sich Benutzer a einloggt, wird das gehashte Passwort von Benutzer a ausgegeben und über password_verify() überprüft. Also soll ich das plain Password auch hashen? Kommt dann genau das selbe raus?

Wenn der Login erstmal funktioniert, werde ich mir Gedanken machen, wie man den Login gegen brute force Angriffe schützen kann
Bitte warten ..
Mitglied: Yanmai
13.11.2016 um 12:32 Uhr
Ich habe das in einem YouTube Tutorial gesehen, dass dann die andere Seite geöffnet wird und dieser dann die Session Variable übergeben wird.
Bitte warten ..
Mitglied: eagle2
14.11.2016 um 20:39 Uhr
Moin Yanmai,

versuch mal den Redirect direkt in PHP zu machen, über die Header-Funktion (Erklärung wie das geht).

Ansonsten würde ich dir empfehlen, dich systematisch in das Thema einzuarbeiten. Auch wenn ja inzwischen alles online und kostenlos sein soll, möchte ich dabei mal Werbung für zwei Bücher machen (mit denen ich nichts zu tun habe und auch keine Affiliate bekomme oder sonst irgendwas):

PHP & MySQL für Kids
PHP & MySQL Praxisbuch für Kids

Im ersten Buch lernt man die Basics, im zweiten wird dann u.a. auch ein vollständiges Loginsystem entwickelt (abgesehen davon, dass da noch SHA1 für Passwörter verwendet wird - die password_hash/password_verify-Funktionen sind da deutlich besser).

Viele Grüße
eagle2
Bitte warten ..
Mitglied: Sheogorath
15.11.2016 um 11:02 Uhr
Moin,

ich würde schonmal garkeine Passwörter direkt übertragen, sondern nur Hashes!!!

Ähm.. nein?

Denn was machst du auf der Gegenseite mit Hashes? Du vergleichst sie mit dem Hash der in deiner DB gespeichert ist? Dann speicherst du deine Passwörter ja doch quasi wieder im Plaintext. Nur dass du sie eben Clientseitig nochmal in was anderen verpackst.

Deswegen werden Passwörter in der Regel tatsächlich übertragen. Aber man kann natürlich so schöne Dinge wie Challange-Response implementieren. Aber nun ja, das ist in der heutigen Praxis zum Glück eigentlich untergegangen, denn man hat halt HTTPS, 2FA und OAuth. Alles mehr oder weniger sicher, aber wie gesagt Hashes überträgt man eigentlich nur da, wo man keine Lust mehr auf sonst was hat.

Und nicht zu vergessen dass CR auch nur funktioniert solange auf beiden Seiten die Passwörter vorliegen, sprich du deine Passwörter irgendwo im Plaintext speichern musst. Das ist bei diesem Use-case weit fahrlässiger als sie irgendwo zu übertragen. Zumindest wenn man HTTPS oder ähnliches als Transport Protokoll verwendet.

Noch sicherer wäre natürlich eine zertifikatsbasierte Authentifizierung, aber das wird die meisten hier überfordern, also lassen wir das mal.

---

Und um dem Thread noch was sinnvolles beizufügen: Sichere Methoden zur Speicherung von Passwörtern in Datenbanken:
https://crackstation.net/hashing-security.htm

Gruß
Chris
Bitte warten ..
Ähnliche Inhalte
PHP
Benutzerregistrierung php, mysql
Frage von zelamediaPHP5 Kommentare

Hallo, kennt jemand ein gutes Tutorial/Anleitung wie ich mit php/mysql eine einfache Benutzer-Registrierung umsetzte mit Benutzerrollen also Administrator/Mitarbeiter usw. ...

PHP
HTML PHP MySQL Webanwendung
Frage von hahaxd3PHP12 Kommentare

Hallo Leute, Ich möchte gerne Meine Datenbank auf einer webseite darstellen. Dabei sollte diese Als normale Tabelle dargestellt sein. ...

PHP
PHP - MySQL-Ausgabe editieren
gelöst Frage von ThoomaasPHP19 Kommentare

Hallo alle zusammen! Ich bin gerade dabei ein Portal für meine Firma zu basteln. Hierbei sollen die User Protokolle ...

PHP
MySQL in PHP mit Variablen
gelöst Frage von carl7nPHP10 Kommentare

Hallo, ich habe PHP-Grundkenntnisse, schaffe es aber nicht, nach meinen Vorstellungen ein paar kleine PHP-Scripts zusammen arbeiten zu lassen. ...

Neue Wissensbeiträge
Netzwerkmanagement

Neue Angebotsmail ist raus: 10 Prozent auf alle Docusnap Lizenzen

Information von Frank vor 1 StundeNetzwerkmanagement

Hallo IT-Pros, unsere Angebotsmail ist raus: Exklusive für unsere Administrator.de-Mitglieder gibt es heute auf alle Miet- und Kauflizenzen von ...

Windows 10
Windows 10 Mai 2019 Update (Version 1903) ist da
Information von kgborn vor 5 StundenWindows 101 Kommentar

Nur ein kurzer Infosplitter: Microsoft hat die Nacht (21. Mai 2019) das Funktionsupdate auf Windows 10 Version 1903 freigegeben. ...

E-Mail

Newsletter: Unread News - IT News in Byte Länge

Tipp von franktaylor vor 17 StundenE-Mail8 Kommentare

Hallo, würde gerne auf einen Newsletter hinweisen, den ich heute per Zufall gefunden und mit euch gerne teilen möchte: ...

Outlook & Mail

Outlook 2016 stürzt ab, wenn man ein (at)- Zeichen im Text einer neuen E-Mail schreibt

Tipp von Enriqe vor 1 TagOutlook & Mail4 Kommentare

Bei uns in der Firma häuften sich die Fälle, bei denen sich Outlook kommentarlos verabschiedet, wenn man ein - ...

Heiß diskutierte Inhalte
Windows Server
Passwortänderung an RODC möglich?
Frage von DexthaWindows Server23 Kommentare

Hallo, ich habe einen RODC, auf welchen ich über ldaps (Web-Seite mit php7) Passwortänderungen durchführen möchte. Ist das grundsätzlich ...

DNS
DNS fragt falsche ip zuerst ab
gelöst Frage von recoldDNS23 Kommentare

Hallo zusammen, wollte mal fragen, was mit meiner DNS falsch ist? der A eintrag 88.48.118.88 sollte auf den ts3 ...

Windows Server
RDP als Citrix Alternative
gelöst Frage von samreinWindows Server19 Kommentare

Hallo zusammen, ich bin neu hier und das ist mein erster Beitrag. Ich bin Einzeladmin und wir setzen bei ...

Windows 10
Windows am MAC
gelöst Frage von LeeX01Windows 1019 Kommentare

Guten Abend zusammen, ich habe gerade ein Macbook Pro vor mir welches ich mit einem Windows 10 to go ...