Eine frohe Adventszeit wünscht Apfeltalk
  • Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Unser Dezember-Wettbewerb steht unter dem Thema Zeitreise - Macht mit und beteiligt Euch mit Euren kreativen Fotos! Zum Wettbewerb --> Klick

Admin Bereich erstellen

Hobbes_

Gast
Ist mysql_num_rows eine Falsche Abrage? Diese kenne ich eigentlich nicht.

Mmh, es ist nicht gerade einfach aus solchen Code-Fragmenten kluge Tipps zu geben...

Der Befehl mysql_num_rows() ist eine reguläre Abfrage in PHP. Fehlermöglichkeiten gibt es zu Hauf:
- Habe gesehen, dass Du die Namen der Tabellenspalten, die oben in den exemplarisch und deshalb knapp gehaltenene Beispielen angegeben wurden durch Variablen ersetzt hast... Ist OK so, wenn Du gerne vordefinierte Parameter hast. Ist eine Fehlerquelle, wenn diese nicht initialisiert wurden.
- Bezüglich der Syntax hat dir Hilarious bereits eine Antwort gegeben...
- Hast Du in MySQL eine Datenbank angelegt und diese in Deinem PHP-Skript auch zum Bearbeiten bereits geöffnet?
- Hast Du in dieser Tabelle Spalten definiert, die den im SQL-Befehl entsprechenden Namen entsprechen?
- ...???

Wie bereits oben erwähnt bietet PHP viele Möglichkeiten. Man ist als Autor jedoch für die Seiten verantwortlich, dass sie nicht ausgenutzt werden. Dabei muss man wirklich extreme Vorsicht walten lassen, wenn man es seriös macht.

Es gibt beim Gebrauch von PHP den Unterschied, ob man nur einige dynamische Elemente einer Web-Seite zufügen will - oder eben interaktive Elemente mit Datenbanken anbieten will.

Gerade wenn das fertige Programm dem Benutzer Möglichkeiten bietet Daten einzugeben oder gar etwa Dateien auf dem Server zu manipulieren (cave canem), muss man sich sehr klar sein, was man macht! Es gibt leider genügend Server, die nicht mehr nur den Benutzern gehören...

So fällt es schwer, Tipps zu geben gerade über einen so sicherheitsrelevanten Bereich. Denn ein erfolgreiches sicheres Login ist nicht gemacht alleine mit den als Beispiel angegebenen Code-Segmenten von oben. Nur schon PHP alleine bietet viele Einfallslöcher, die vor Beginn mit dem Code gestopft sein müssen.


Kurz: Ich empfehle Dir, Dich vor dem Schreiben des Programms noch etwas mit den Basics zu befassen und somit etwas mehr Zeit in Research zu legen. Danach wird es Dir wesentlich leichter fallen, das Programm von Grund auf korrekt zu designen. Zusätzlich hast Du nicht nur ein paar Kniffs gelernt, sondern Dir ein grundlegend sauberes Arbeiten mit stabiler Basis zugelegt...

Einige hervorragende Links hast Du oben bereits gefunden. V.a. das Tutorial ist als Startpunkt der Hit. Daneben gehören die Kapitel über SQL und die Sicherheitsbestimmungen der php.net Seite und einige Gedanken zu MySQL zur Grundlektüre. Auch schadet ein Buch, das dieses Thema abhandelt, nicht.
Daneben kann auch Google (zB. die spezielle Version http://www.google.com/codesearch aus dem Labs Bereich) Dir einige Beispiele für erfolgreiche Admin-Logins zeigen, nach denen Du vorgehen kannst...

Aus jahrelanger Codeentwicklung lernt man: Man muss das Rad nicht immer neu erfinden. Schon einige Leute haben sich viele Gedanken zu sicheren Logins gemacht. Man darf auf den Schultern von Giganten stehen (siehe auch Zitat von Google scholar)... Dabei gehört selbstverständlich das Beachten der Code-Lizenzen und das korrekte Referenzieren auf die verwendeten Quellen mit dazu...


Damit viel Erfolg für Deine Projekte!!!!

just my 2 cents
psc
 
Zuletzt bearbeitet von einem Moderator:

wapplegraph

Normande
Registriert
12.04.06
Beiträge
571
Hallo

Sorry, das ich dies wider aufgreife, doch nun habe ich entlich ein laufendens Login.

Meine SQL-Abfrage:

Code:
$sql = "SELECT 
					ID
				FROM
					tb_adminUser";
		$sql .= sprintf(" WHERE %s = LOWER('%s')", mysql_real_escape_string('fd_user'), mysql_real_escape_string($userLogAd));
		$sql .= sprintf(" AND %s = MD5('%s')", mysql_real_escape_string('fd_pwd'), mysql_real_escape_string($pwdLogAd));
		$sql .= "LIMIT
					1";

Ich frage mich nun, was das Erste in der sprintf-Funktion bringt. Bringt es etwas?

wapplegraph
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Aber fd_user ist ja einfach der Name des Feldes, wo gar niemand Zugriff hat.

Schon, aber letztendlich kann mit fiesen Tricks bei Unachtsamkeit oder Unwissen des Server-Admins jede Variable irgendwann überschrieben werden. Oder es ist zumindest denkbar. So ist jede Übermittlung eines SQL-Statements nur mit wirksamen Sicherheitsmethoden zu empfehlen. Und ein bisschen Paranoia hat hier keine bösen Nebenwirkungen, zumal die Methode mysql_real_escape_string von der MySQL-API und nicht von PHP ausgeführt wird, was noch einen Zacken schneller sein dürfte, als ein selbstgeschriebenes preg_replace.

Zusatz: Ich habe nicht ganz hingeschaut, aber ich sehe jetzt besser, was Du meinst. So wie es formuliert ist, macht es natürlich recht wenig Sinn. Da kann man den Feldbezeichner auch direkt im Statement nennen:
Code:
$sql = "SELECT 
ID
FROM
tb_adminUser";
$sql .= sprintf(" WHERE fd_user = LOWER('%s')", mysql_real_escape_string($userLogAd));
$sql .= sprintf(" AND fd_pwd = MD5('%s')", mysql_real_escape_string($pwdLogAd));
$sql .= "LIMIT 1";
 

wapplegraph

Normande
Registriert
12.04.06
Beiträge
571
Also kann ich dies gar nicht sicherer schreiben, so wie es ist. Nur wenn ich die Feldnamen in einer Variable gespeichert hätte, würde es etwas bringen.

wapplegraph