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, 758 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
Webentwicklung
Php mysql abfrage
gelöst Frage von Christian181005Webentwicklung4 Kommentare

Kann mir jemand Helfen? Ich mächte diese Daten von meiner Datenbank ausgeben lassen aber es wird nichts angezeigt.

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
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
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. ...

Neue Wissensbeiträge
Microsoft
PowerShell script für LAPS
Information von kgborn vor 2 StundenMicrosoft1 Kommentar

Kurzer Hinweis für Admins im AD-Umfeld. Ich bin die Tage auf das PowerShell Script der Woche “Local Administrator Password ...

Windows 10
Windows 10 bis Version 1803 und das Zwangs-Upgrade
Information von kgborn vor 2 StundenWindows 10

Ich denke, die meisten Admins hier werden Systeme mit Windows 10 Enterprise einsetzen und Updates per WSUS/SCCM oder ähnlichem ...

Microsoft Office
BSI-Empfehlungen für die Office-Konfiguration
Information von kgborn vor 2 StundenMicrosoft Office

Kurze Information für Admins, die Office verwalten. Das BSI hat einige Regeln für die Absicherung von Office-Konfigurationen veröffentlicht. Ich ...

Windows 10

Sandy-Bridge plus Nvidia plus Win10 1903 braucht Hotfix

Information von DerWoWusste vor 4 TagenWindows 101 Kommentar

Es gibt ein Problem in der seltenen Konstellation Nvidia-Grafikkarte/Sandy-Bridge-CPU/Win10v1903: die von Nvidia vorgeschlagenen Treiber lassen sich nicht installieren. verlinkt ...

Heiß diskutierte Inhalte
Batch & Shell
Powershell Skript für Reg Datei ändern
gelöst Frage von SoccerdeluxBatch & Shell16 Kommentare

Hallo zusammen, ich muss auf einem Windows 10 Pc ein Skript ausführen lassen was sich alle 5 Minuten wiederholt. ...

Windows 10
WLAN-Verbindung wird getrennt, wenn per RDP auf das System zugegriffen wird
Frage von LordGurkeWindows 1016 Kommentare

Hallo, ich habe hier eine eigentlich sehr einfache Konstellation, die aber nun plötzlich Probleme verursacht: Es gibt ein Notebook ...

LAN, WAN, Wireless
WLAN in Veranstaltungshalle
Frage von coltseaversLAN, WAN, Wireless14 Kommentare

Hallo zusammen, für eine Halle mit 1300 m² suche ich derzeit nach einer WLAN-Hotspot-Lösung für bis zu 500 User ...

Windows 10
Windows 10 Logonskript greift nicht
Frage von xbast1xWindows 1011 Kommentare

Hallo zusammen, da sich die per GPO gemappten Laufwerke bei allen Usern schließen und das Problem sich nicht lösen ...