Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Benutzer Login mit Passwort (https://www.delphipraxis.net/116328-benutzer-login-mit-passwort.html)

infY2k7 26. Jun 2008 22:00


Benutzer Login mit Passwort
 
Hi junx!

Folgendes Problemchen: Hab mit nen paar Kumpels ein kleines tool geschrieben. Dieses wollen wir nun schützen, indem wir eine Login-Funktion einbauen.

Die Benutzer sollen sich mit einem Accountname und Password einloggen. Hier ist das Problem - ich weiß nicht wo!

Habs hingekriegt, sich auf nem mysql Server einzuloggen. Problem: kann meinen PC nicht 24/7 anlassen, d.h. ich brauch einen mysql-server im Internet der externe Zugriffe erlaubt. Ich hab stundenlang gesucht, glaubt mir, es gibt keinen kostenlosen!

Habs auch geschafft, .txt Dateien von meinem FTP-Server (host:funpic.de) runterzuladen und auszulesen, jedoch wird hier immer die ganze Datei ausgelesen.
Hier die Funktion dazu:

Delphi-Quellcode:
Function GetHTML(AUrl: string): string;//KEY-CHECK:
var
  databuffer : array[0..4095] of char;
  ResStr : string;
  hSession, hfile: hInternet;
  dwindex,dwcodelen,dwread,dwNumber: cardinal;
  dwcode : array[1..20] of char;
  res   : pchar;
  Str   : pchar;
begin
   ResStr:='';
   Result:='';
   if pos('http://',lowercase(AUrl))=0 then
     AUrl:='http://'+AUrl;
   hSession:=InternetOpen('InetURL:/1.0',
                       INTERNET_OPEN_TYPE_PRECONFIG,
                       nil,
                       nil,
                       0);
   If assigned(hSession) Then Try
      hfile:=InternetOpenUrl(
         hsession,
         pchar(AUrl),
         nil,
         0,
         INTERNET_FLAG_RELOAD,
         0);
      if assigned(hfile) then Try
         dwIndex := 0;
         dwCodeLen := 10;
         HttpQueryInfo(hfile,
                HTTP_QUERY_STATUS_CODE,
                @dwcode,
                dwcodeLen,
                dwIndex);
         res := pchar(@dwcode);
         dwNumber := sizeof(databuffer)-1;
         if (res ='200') or (res ='302') then begin
            while (InternetReadfile(hfile,@databuffer,dwNumber,DwRead)) AND (dwRead <>0) do begin
                  databuffer[dwread]:=#0;
                  Str := pchar(@databuffer);
                  resStr := resStr + Str;
                  Application.ProcessMessages;
            end;
         end else
             ResStr := 'Status:'+res;
      Finally
             InternetCloseHandle(hfile);
      End;
   Finally
          InternetCloseHandle(hsession);
   End;
   Result := ResStr;
end;
Ich suche eine sichere Benutzer-Login Variante. Möglichst sollten sich auch nicht 2 Benutzer in einen Account einloggen können, sonst wär es ja sinnlos. Bitte um eure Hilfe!

danke im Vorraus, mfg infY

sirius 26. Jun 2008 22:21

Re: Benutzer Login mit Passwort
 
Regel Nummer 1: Sicher gibt es nicht!

Und egal wo du dein Passwort versteckst, was willst du damit machen? Eine IF-Abfrage kann ich dir ratz fatz rauspatchen. Da kann dein PRogramm auf dem Mond nach Passwörtern gucken. Ich überspringe die Abfrage.

Du könntest Teile des Programms verschlüsseln, welche nur mit dem richtigen Passwort wieder entschlüsselt wird, ansonsten kommt eben kein brauchbarer Code heraus. Oder du errechnest aus den Passwörtern o.ä. wichtige Konstanten, ohne die dein Programm nicht brauchbar wäre. Du müsstest also eine Vollzeitpräsenz des Passwortes schaffen und dennoch... wenn es einmal geknackt ist, dann ist es vorbei. Lohnt sich also wirklich der Aufwand für Euch?

rollstuhlfahrer 26. Jun 2008 22:26

Re: Benutzer Login mit Passwort
 
HI,

einen MySQL-Server rund um die Uhr laufen zu lassen (auf einem privaten PC) finde ich nicht so gut. Du hast doch einen Account bei Funpic. Erstell dir dort ein PHP_Script, dass die Anmeldung übernimmt. Du brauchst dann auch noch eines, dass die Abmeldung übernimmt. Diese beiden PHP_Scripte haben den Zugriff auf die Funpic-MySQL-DB. Darüber regelst du den Login. Hierbei würde ich dir empfehlen, User und PW über POST zu senden, da das dann nicht mehr so leicht zu knacken ist oder nimm gleich die Checksummen.

Was beim Abmelden schwer fällt, ist dass du dich auf jeden Fall abmelden müsstest (oder du machst eine Zugriffsbeschränkung für ~2 Std. ohne Abmeldung).

Ich weiß jetzt nicht ob der Code zur VCL oder zur nonVCL gehört, aber in beiden Varianten würde ich hier IdHTTP als Träger vorschlagen.

Bernhard

EDIT: Zur Sicherheit: Es würde mich wundern, wenn du einen HTTPS-Zugriff hinbekämst.

geskill 27. Jun 2008 01:10

Re: Benutzer Login mit Passwort
 
Zitat:

Zitat von rollstuhlfahrer
Erstell dir dort ein PHP_Script, dass die Anmeldung übernimmt. Du brauchst dann auch noch eines, dass die Abmeldung übernimmt. Diese beiden PHP_Scripte haben den Zugriff auf die Funpic-MySQL-DB. Darüber regelst du den Login.

Genau!
Dann musste dich auch nicht mit SQL injection rumschlagen, guck dir mal die Komunikation von Anwendung und externer DB unter einem Sniffer an... schrecklich

gmc616 27. Jun 2008 02:03

Re: Benutzer Login mit Passwort
 
Zitat:

Zitat von infY2k7
Hier ist das Problem - ich weiß nicht wo!

Muß es unbedingt eine Datenbank sein? Arbeitet euer Tool mit dieser Datenbank?

Wenn nicht, was spricht gegen eine Art Lizenz-Datei die man sich gegen eine einmalige Anmeldung am Server herunter laden kann und auf dem Rechner speichert.

Dazu generiert eurer Tool eine Art eindeutigen Computer-ID aus z.B. MAC-Adresse oder Windows-Seriennummer oder weiß der Teufel was. Zusammen mit UserName, Passwort und eben dieser ID generiert ihr eine verschlüsselten String z.B. MD5-Hash auf dem Server und schickt es dem Tool zurück, welches dann diesen String auf Platte speichert.

Beim nächsten Start, prüft euer Tool den eingegebenen UserName, Passwort und die neu ermittelte ID gegen den String in der gespeicherten Datei und schon sollte der Benutzer authentifiziert sein.

So verhinderst ihr zunächst einmal, daß euer Tool einfach weiter kopiert werden.
Auch ein Sniffer wäre sinnlos, wenn einmal die Lizenz auf dem Rechner liegt.

Und wenn ihr auf den Server noch eine Benutzerprüfung vornehmt, welcher Benutzer überhaupt eine Lizenz bekommen kann, könnt ihr auch sicher sein, dass nur gewünschte Benutzer euer Tool verwenden können.

Ob man nun einzelne Programmteil verschlüsseln muss, so wie Bernhard schreibt, weiß ich nicht.
Ich denke mal, dass man mit eurem Tool mit einem Mausklick nicht unbedingt die Weltherrschaft an sich reisen kann, so das dieser Aufwand nicht nötig sein muß.

Hier müßt ihr Sicherheit und Nutzen gegen einander abwägen.

Zu den If-Abfragen-Rauspatchen ... wenn euer Tool an mehren stellen im Code die Lizenzprüfung vornimmt, wird es schon nerviger für nen Cracker all die entsprechenden Stellen zu finden, aber nicht unmöglich.

Wie schon gesagt wurde: 100%ige Sicherheit gibt es nicht.

Vielleicht ist ja mein Vorschlag eine Idee für euch?

infY2k7 27. Jun 2008 09:06

Re: Benutzer Login mit Passwort
 
Okay schonmal gute Vorschläge, werd mich mal genauer damit beschäftigen..
danke ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz