FTP-Verbindung zur Webseite

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag von Max. »

Noch was; falls Du die MySQL DB bei irgendeinem Provider hast, kann es sein, dass direkte Zugriffe von anderen Rechnern nicht gestattet sind (Puretec/1und1 macht es so).

Dann hast Du nur Zugriff vom Webserver aus und musst einen Umweg gehen. Am Einfachsten ist es dann, passende PHP oder Perl Skripte zu erstellen und dann die von Deinem PureBasic Proggy aus anzusprechen.

Du sendest praktisch ne Anfrage an die Webseite in der Art
http://www.mein-server.de/datenbank.php?Kommando=Insert into ...

Aber immer gut auf die Abschottung der Skripte achten! Zum Beispiel kann jemand mit den SQL Wildcards wie % oftmals Unfug anstellen, wenn man nicht aufpasst! :twisted:
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Wie solch eine Abschottung funktionieren könnte würde mich sehr interessieren.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

es wird ganz einfach überprüft was für ne IP der jenige hat der connectet und dann mit der lokalen IP verglichen. Wenn sie ungleich sind wird eine verbindung verweigert 8)
Bild
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag von Max. »

bluejoke hat geschrieben:Wie solch eine Abschottung funktionieren könnte würde mich sehr interessieren.
Das Wichtigste ist, Eingaben immer zu "quoten" (wird von MySQL unterstützt und kann auch von PHP aus verwendet werden).

Sagen wir mal, die Abfrage in PHP lautet:

SELECT count(idx) FROM Kundentabelle WHERE Username LIKE '$Username' and Password like '$Password';

$Username und $Password sind die Variablen, die bei Aufruf der Webseite (z.B. http://www.myserver.de/checklogin.php?U ... agichnicht) übergeben werden.

Die Abfrage zählt, wieviele übereinstimmende Einträge es gibt, in der Annahme, daß jeder Username nur einmal vorkommt.

Ruf ich die Seite also richtig auf (von einem Formular zur Eingabe der Benutzerdaten) und bin in der Datenbank erfasst, dann liefer die SELECT Abfrage als Ergebnis 1 zurück.

Ich bin also bekannt und darf rein.

Nun gibt es aber Wildcards in SQL (wie * bei Dateien; hier ist es %).

Ruft nun jemand diese Seite mit meinem Usernamen auf, aber verwendet als Passwort die Wildcard, dann wird der Ausdruck in PHP so extrahiert, wie hier:

SELECT count(idx) FROM Kundentabelle WHERE Username LIKE 'Max.' and Password like '%;

Das heisst soviel wie: Zähl mir die Anzahl der User "Max." mit irgendeinem Passwort... kommt auch nur 1 raus - und der Hacker ist drin.

Wird nun die Eingabe gequoted, wird das Passwort umgewandelt nach: '\%', was soviel heisst wie: exact das Zeichen "%" als Passwort.

Stimmt ja nicht, Ergebnis 0 -> kein Zutritt.

Ich denke, in der Include Datei für MySQL habe ich das Quote Kommando drinnen.

Ein anderer Punkt - hat nichts mit MySQL zu tun, sondern generell: Ein richtige Abfrage in der Art wie oben muss 1 zurückgeben. Nicht >0. 2 ist auch größer Null, aber ist nicht erlaubt (schliesslich darf jeder User nur einmal in der Datenbank vorkommen!) und somit stimmt was nicht: no go!

Also immer exakte Ergebnisse erwarten und bei Abweichungen darauf reagieren.

Was anderes; ich hasse es eigentlich, wenn Username (Nickname) und Login gleich sind. Schliesslich kann der User/Nick von jedem gesehen werden. Damit muss einer nur noch das Passwort hacken... besser den Login nur für den Login verwenden, und als Displaynamen den User was anderes wählen lassen.

Zurück zu SQL:

Sehr beliebt ist auch, Abfragen anzuhängen:

Zur Erinnerung die Abfrage von vorhin... SELECT count(idx) FROM Kundentabelle WHERE Username LIKE '$Username' AND Password LIKE '$Password';


Nun kann ja jemand auf die Idee kommen, als Password das zu verwenden:

egal' OR 1 OR '

Die Query sieht dann so aus:

SELECT count(idx) FROM Kundentabelle WHERE Username LIKE 'Max.' AND Password LIKE 'egal' OR 1 OR '';

OR 1

ist immer wahr, Abfrage also erfolgreich. Dem wird natürlich auch ein Riegel vorgeschoben, wenn gequoted wird:

'egal\' OR 1 OR \''

Aber es ist trotzdem erwähnenswert, weil ein Pöser Pursche allerhand Abfragen angehängen kann, die neben Passwortklau noch ganz andere Dinge machen; Tabellen/Datenbanken löschen, downloaden, uploaden und gelegentlich sogar aufs lokale Dateisystem zugreifen...

Also auch immer die MySQL Berechtigungen sehr restriktiv setzen! Bei PHP greift ja im Grunde nicht der Anwender auf die DB zu, sondern ein eigener Benutzer. Der sollte nie mehr dürfen, als das unbedingt notwendige!

Am Besten ist es, alle DB Einstellungen in eine PHP include Datei zu legen - und anschliessend dafür zu sorgen, dass die Datei nicht lesend geöffnet werden kann von Gott und der Welt. Große Provider achten in der Regel darauf, dass .inc Dateien nicht angezeigt werden können. Falls nicht geschehen, kann man das mit einer .htaccess Datei erreichen.

Und ein letztes: äusserst vorsichtig beim Zugriff aufs lokale Dateisystem. Sehr beliebt sind zum Beispiel Loader für Seiten...

http://www.myserver.de/load.php?seite1.htm

Häufig wird vergessen, was passiert, wenn ein (Ab)user mal kurz http://www.myserver.de/load.php?/etc/passwd oder eine andere Datei aufruft... zwar kann man PHP sehr restriktiv installieren, aber falls das vergessen wurde, hat jemand lesenden Zugriff auf das komplette Dateisystem, u.a. auch auf die vorhin erwähnte

http://www.myserver.de/load.php?datenbank.inc

Wahrscheinlich kann man darüber wochenlang referieren... ich kratze da auch nur an der Oberfläche, aber ich denke es hilft als Denkanstoß...
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag von Max. »

LittleFurz hat geschrieben:es wird ganz einfach überprüft was für ne IP der jenige hat der connectet und dann mit der lokalen IP verglichen. Wenn sie ungleich sind wird eine verbindung verweigert 8)
Wenn Du ne PHP Seite mit DB Anbindung aufrufst, dann "connected" immer nur der lokale Server.

Wenn, dann musst Du den Webserver so einstellen, dass er nur auf bestimmte IPs reagiert, allerdings ist das bei öffentlichen Webseiten selten so gewünscht.

Sollte jemand direkten Zugriff auf den MySQL Server haben, dann ist der PHP Wrapper eh überflüssig...
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Vielen Dank für die interessanten Posts, jetzt weiß ich auf jeden Fall mehr als zuvor.

Interessieren tut mich immernoch, wie ich die Passwortübergabe von einem PB-Programm zu einem Server-Skript (z.B. PHP) abschotten kann.
Normalerweise wird das Passwort ja immer im Klartext gesendet. Das würde ich am liebsten irgendwie umgehen...
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

bluejoke hat geschrieben:Vielen Dank für die interessanten Posts, jetzt weiß ich auf jeden Fall mehr als zuvor.

Interessieren tut mich immernoch, wie ich die Passwortübergabe von einem PB-Programm zu einem Server-Skript (z.B. PHP) abschotten kann.
Normalerweise wird das Passwort ja immer im Klartext gesendet. Das würde ich am liebsten irgendwie umgehen...
Du verschlüsselst ein Passwort mit PB und einen Key zum entschlüsseln sendest es als link.php?pw=verschlüsseltespw?key=234hj324, dass gleiche machste dann mit php nur entschlüsseln ....! Oder du speicherst dass PW in PHP direkt ab, und überträgst nur einen access key ....

Soll nur ne anregung sein ;)

MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Dann kann ja aber jeder Hacker oder wer sonst noch lust hat,
diese GET-Abfrage (nein, es ist ja doch eine POST-Abfrage...) abfangen und das selbe senden, um sich einzuloggen.
Antworten