Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idHTTPServer : Einloggen (https://www.delphipraxis.net/50354-idhttpserver-einloggen.html)

Assun 24. Jul 2005 12:55


idHTTPServer : Einloggen
 
Hi !

Mein Server funtkioniert soweit schon ganz gut ! Doch wie kann kann ich realisieren, dass sich Benutzer nur mit gültigem Passwort + Nutzername einloggen können ?

Ich habe diesen Code :

Delphi-Quellcode:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
Var
  Stream: TFilestream;
  TheString : String;

  begin
if ARequestInfo.Document = '/' then
begin
  try
  if ARequestinfo.Username = 'Assun' then
  begin
  inc(i);
  Caption := ('Bereits' + IntToStr(i) + 'Aufrufe');
  AResponseInfo.ContentType  := 'text/html';
  Stream := TfileStream.Create('Admin/test.htm', fmOpenRead or fmShareDenyWrite );
  AResponseInfo.ContentStream := Stream;
  setlength(TheString, stream.size);
  stream.Read(TheString[1], stream.size);
  end
  except
  Exit;
  end;
  end
else
if ARequestInfo.Document = '/test.jpg' then
begin
  try
  AResponseInfo.ContentType  := 'image/jpeg';
  Stream := TfileStream.Create('Admin/test.jpg', fmOpenRead or fmShareDenyWrite );
  AResponseInfo.ContentStream := Stream;
  except
  Exit;
  end;
end;

Gruß

Assun

Assun 24. Jul 2005 15:23

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
habe nun etwas code. doch ich weiss nicht wie ich den Namen übergeben soll.

Weiss da jemand was ?

MrKnogge 24. Jul 2005 15:25

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
Dann zeig doch mal deinen Code.
Was meinst du mit übergeben ?

Von der HTML-Seite zu deinem Programm ?
Stichwort: Submit

gruss

Assun 24. Jul 2005 15:46

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
Der Code steht oben.

Reicht es einfach die Felder abzusenden ??

Wie muss ich die Felder dann benennen ?

SirThornberry 24. Jul 2005 16:02

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
du musst
Delphi-Quellcode:
AResponseInfo.AuthRealm
setzen. Damit bringt der Client (InternetExplorer etc.) einen Passwortdialog hoch wie man es von htaccess gewöhnt ist. Und auf diese Art und weiße kommt dann auch das Passwort zum Server.

MrKnogge 24. Jul 2005 16:06

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
Du kannst es auch ganz normal wie ein Formular senden, die ergebnisse stehen dann in
Delphi-Quellcode:
ARequestInfo.params
gruss

Assun 24. Jul 2005 17:44

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
Delphi-Quellcode:
If ARequestInfo.params := 'Assun' then.........
geht nicht. da bringr er mir "inkompatible Typen, String und TStrings"

nur wie soll ich da TStrings einbauen ?

Und wie kann ich realisieren, dass nach 2 werten gefragt wird ? also so in etwa

Delphi-Quellcode:
if ARequestInfo.params := 'Assun' and 'meinpasswort' then....
?

:confused:

MrKnogge 24. Jul 2005 17:49

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
params ist vom Typ TStrings also
Delphi-Quellcode:
ARequestInfo.params[0]
ARequestInfo.params[1]
...
Die Anzahl der Parameter bekommst du mit
Delphi-Quellcode:
ARequestInfo.paramcount-1

Assun 24. Jul 2005 19:58

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
ok, dank Mr.Knogges Hilfe (THX !!!) geht das einloggen nun !!

mit diesem Code :

Delphi-Quellcode:
function Parse(char, s: string; count: integer): string;
 var
   i: Integer;
   t: string;
 begin
   if s[length(s)] <> char then
     s := s + char;
   for i := 1 to count do begin
     t := copy(S, 0, pos(char, s) - 1);
     s := copy(s, pos(char, s) + 1, length(s));
   end;
   result := t;
 end;
und

Delphi-Quellcode:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
Var
  Stream: TFilestream;
  TheString : String;
  i, Anzahl : Integer;

  begin
if ARequestInfo.Document = '/' then
begin
  try
  begin

    AResponseInfo.ContentType  := 'text/html';
    Stream := TfileStream.Create('Admin/login.htm', fmOpenRead or fmShareDenyWrite );
    AResponseInfo.ContentStream := Stream;
    setlength(TheString, stream.size);
    stream.Read(TheString[1], stream.size);
    Anzahl := ARequestInfo.Params.Count;

    for i := 1 to Anzahl do


  if (parse('=', ARequestInfo.params[0], 1) = 'submit') and
          (parse('=', ARequestInfo.params[0], 2) = '1') then
          if (parse('=', ARequestInfo.params[1], 1) = 'username') and
             (parse('=', ARequestInfo.params[1], 2) = 'Assun') then
            if (parse('=', ARequestInfo.params[2], 1) = 'password') and
               (parse('=', ARequestInfo.params[2], 2) = 'test') then begin

    AResponseInfo.ContentType  := 'text/html';
    Stream := TfileStream.Create('Admin/test.htm', fmOpenRead or fmShareDenyWrite );
    AResponseInfo.ContentStream := Stream;
    setlength(TheString, stream.size);
    stream.Read(TheString[1], stream.size);
    userok := true;
               end;
   end
   except
   Exit;
end;
end;
end;

end.
Meine Bitte : geht bitte alle mal auf http://assun.gotdns.com/ (mein delphi http server) und loggt euch ein. dann steht da "sie sind eingeloggt". das ist eine htm datei namens "test.htm" <-- versucht mal diese anzuzeigen ohne das ihr euch einloggt !

Um euch normal einzuloggen :

Name = Assun
Passw = test

Und noch ne Frage : wie kann ich erreichen, dass das passw nicht mehr im Browser oben inner Adresszeile angezeigt wird ?

Vielen Dank für eure Mühe !

Gruß Assun

Edit // Und wie immer bitte Rückmeldung geben. also "Geht das einloggen?", "habt ihr ne Sicherheitslücke gefunden?" oder "wisst ihr wie ich das umgehen kann dass man inner Adresszeile den Namen + passw sieht?"

;-)

Assun 25. Jul 2005 10:51

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
Hat jemand geschafft auf test.htm zuzugreifen ohne sich einzuloggen ?

Oder hat jemand ne Idee wie man es umgehen kann dass das passw in der Adresszeile angezeigt wird ?

http://assun.gotdns.com

memphis 25. Jul 2005 10:59

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
hallo

ersetze
Code:
method="get"
durch
Code:
method="post"
und das Passwort wird in der Adresszeile nicht mehr angezeigt.

Grüsse
Luki

Assun 25. Jul 2005 11:04

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
Perfekt :thumb: funktioniert einwandfrei !

Hat es jemand geschafft das Login zu durchbrechen und anderst auf test.htm zu kommen ?

SubData 25. Jul 2005 11:11

Re: idHTTPServer : Login Identifizierung, wie realisieren ?
 
Wenn du es dir ein wenig einfacher machen möchtest, dann setz mal ParseParams auf True und du kannst auf die Werte wie folgt zugreifen:

Delphi-Quellcode:
if ((ARequestInfo.Params.Values['user'] = 'admin') and (ARequestInfo.Params.Values['pass'] = 'test')) then
begin
  // Blubb usw...
end;
Ausserdem gibt es noch eine richtige HTTP Authentifizierung...

Delphi-Quellcode:
      if ((ARequestInfo.AuthUsername <> 'admin') or (ARequestInfo.AuthPassword <> 'pass')) then
      begin
        AResponseInfo.ContentText := 'Bitte Admin-Benutzernamen und Kennwort eingeben...';
        AResponseInfo.AuthRealm := 'Admin Bereich';
        exit;
      end;

Edit: Blödsinn beseitigt -g-

Edit2: Du brauchst übrigens auch nicht immer einen Stream sondern kannst einfach ContentText setzen, das hat den gleichen Effekt ;>

Edit3: Nochmal Blödsinn beseitigt -.-

Assun 25. Jul 2005 11:53

Re: idHTTPServer : Problem mit HTML Datei !
 
Habe ein kleines Problem mit der HTML Datei !

Die neue HTML File :

Zitat:

<form method="post" action="">
<input type="hidden" name="submit" value="1">
</form>
<p style="margin-top: -3px"><font face="Verdana" size="2">Willkommen !</font></p>


<font face="Verdana" size="2">Dieser Server ist durch den neuesten
Sicherheitsstandard von Assunsoft geschützt.</font></p>


<font face="Verdana" size="2">Geben Sie bitte den Benutzernamen und Ihr
Kennwort ein.</font></p>
<p style="margin-bottom: -3px"></p>
<table class=Stil5>
<tr>
<td><font face="Verdana" size="2">Username:</font></td>
<td><input type="text" name="username" size="20"></td>
</tr>
<tr>
<td><font face="Verdana" size="2">Password:</font></td>
<td><input type="password" name="password" size="20" ID="Text1"></td>
</tr>
<tr>
<td colspan="2" align="center"><font face="Verdana">
<input type="submit" value="Einloggen"></font></td>
</tr>
</table>
Die alte HTML Datei :

Zitat:

<form method="get" action="">
<input type="hidden" name="submit" value="1">
<table class=Stil5>
<tr>
<td>Username:</td>
<td><input type="text" name="username" size="20"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" size="20" ID="Text1"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Login"></td>
</tr>
</table>
</form>
Nun geht die neue HTML datei nicht mehr !

Beim absenden geschieht einfach nichts mehr :-(

Was ist daran falsch ?

SubData 25. Jul 2005 11:54

Re: idHTTPServer : Problem mit HTML Datei !
 
Du musst die Form erst NACH der Tabelle schließen und nicht davor ;>

Assun 25. Jul 2005 11:57

Re: idHTTPServer : Problem mit HTML Datei !
 
:oops: THX ^^ jetzt gehts wida


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 Uhr.

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