Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   am Webserver (PHP) anmelden (https://www.delphipraxis.net/198983-am-webserver-php-anmelden.html)

strom 16. Dez 2018 19:31

am Webserver (PHP) anmelden
 
hallo,

möchte mich zur authentifizierung am webserver anmelden.
was ist hier falsch?

wie könnte eine request (fehlercode) für ein memo aussehen?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  params: TStringList;
  url: string;
begin
  url:='http://www.test.de/index.php?action=login';
  params := TStringList.Create;
  with params do
  begin
    Add('email='+'test@test.de');
    Add('password='+'test');
  end;
    idHTTP1.Post(url, params);
  params.free;
end;

DieDolly 16. Dez 2018 19:55

AW: am Webserver (PHP) anmelden
 
Also als erstes: https.
Als zweites kein with.
Dann
Delphi-Quellcode:
 Add('email=test@test.de');
 Add('password=test');
Wo der Fehler liegt kann ich dir trotzdem nicht sagen. Vielleicht akzeptiert dein Server das einfach nicht ohne HTTPs was ich nicht schlecht fände.

Abgesehen davon haben Logindaten nichts in einer ausführbaren Datei zu suchen.

strom 16. Dez 2018 20:12

AW: am Webserver (PHP) anmelden
 
hallo,

https kommt später (SSL) Port 443 zum testen erstmal über port 80


So geht es auch nicht?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  params: TStringList;
  url: string;
begin
  url:='http://www.test.de/index.php?action=login';
  params := TStringList.Create;
  try

    params.Add('email=test@test.com');
    params.Add('password=test');

    idHTTP1.Post(url, params);
  finally
    params.free;
  end;
end;

DeddyH 16. Dez 2018 20:20

AW: am Webserver (PHP) anmelden
 
Bist Du sicher, dass das Format so stimmt? Möglicherweise erwartet der Server ja auch ein JSON-Objekt im Payload. Hast Du es mal ohne Delphi z.B. Mit Postman versucht? Oder ist der Login gar dokumentiert?

strom 16. Dez 2018 20:30

AW: am Webserver (PHP) anmelden
 
PHP so sieht der Code aus...


Code:
if (isset($_SESSION['userSession'])!="") { 
   header("Location: home.php");
   exit;
Code:
if (isset($_POST['btn-login'])) {
Code:
 if (password_verify($password, $row['password']) && $count==1) { 
                         $_SESSION['userSession'] = $row['user_id'];      
                         header("Location: home.php");
[

DieDolly 16. Dez 2018 20:34

AW: am Webserver (PHP) anmelden
 
Code:
if (isset($_POST['btn-login'])) {
Wenn ich die Zeile richtig verstehe, dann wird nur eingeloggt, wenn das tatsächlich über eine Komponente (vermutlich Button) mit der id btn-login geht.

Das wird meiner Meinung nach sehr hacky und unsicher. Du musst btn-login also auch noch mitschicken.


SSL sollte, selbst zum Testen, oberste Priorität haben. Du schickst schließlich heikle Daten übers WWW.

DeddyH 16. Dez 2018 20:36

AW: am Webserver (PHP) anmelden
 
Nunja, zumindest btn-login fehlt ja in Deinem Post-Request.

strom 16. Dez 2018 20:48

AW: am Webserver (PHP) anmelden
 
zum testen gehe ich doch über das Netzwerk ip, der port 80 ist doch im router nicht freigegeben!

habt aber natürlich recht! alles gut!

wie sende ich ein btn-login über params?

DeddyH 16. Dez 2018 20:54

AW: am Webserver (PHP) anmelden
 
So wie die anderen Parameter auch, wie das aussehen soll kannst Du ja im PHP-Source nachlesen, der scheint Dir ja vorzuliegen.

DieDolly 16. Dez 2018 20:58

AW: am Webserver (PHP) anmelden
 
Zitat:

wie sende ich ein btn-login über params?
So wie du auch die anderen Sachen mitsendest.

strom 16. Dez 2018 21:18

AW: am Webserver (PHP) anmelden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Fehlermeldung

HTTP/1.1 302 Moved Temporaily. :roll:

strom 16. Dez 2018 21:25

AW: am Webserver (PHP) anmelden
 
Liste der Anhänge anzeigen (Anzahl: 1)
jetzt geht es! Danke :-)

DP-Maintenance 16. Dez 2018 21:39

Dieses Thema wurde am "16. Dec 2018, 22:39 Uhr" von "Luckie" aus dem Forum "Programmieren allgemein" in das Forum "Netzwerke" verschoben.

strom 16. Dez 2018 21:41

AW: am Webserver (PHP) anmelden
 
hallo, habe doch noch ein problem :-) wie fange ich die request Ok 200 ab?

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var
  params: TStringList;
  url: string;
begin
  url:='http://192.168.0.85/index.php?action=login';
  params := TStringList.Create;
  try
    params.Add('btn-login=btn-login');
    params.Add('email='+ Edit1.Text);
    params.Add('password='+ Edit2.Text);

    idHTTP1.Post(url, params);

except
  on E: EIdHTTPProtocolException do
    if (idhttp1.ResponseCode = 200) then
      Showmessage('Test');
    else
     Showmessage('Fehler');

    params.free;
  end;
end;

DieDolly 16. Dez 2018 21:51

AW: am Webserver (PHP) anmelden
 
Das HTTP Objekt hat eine Property dafür. Kleiner Tipp: Integer.

strom 16. Dez 2018 22:09

AW: am Webserver (PHP) anmelden
 
ok,

wieso wird immer der code 200 zurückgegeben? auch wenn die logindaten falsch sind?

Delphi-Quellcode:

var
  params: TStringList;
  url: string;
  code: integer;
begin
  url:='http://192.168.0.39/index.php?action=login';
  params := TStringList.Create;
  try
    params.Add('btn-login=btn-login');
    params.Add('email='+ Edit1.Text);
    params.Add('password='+ Edit2.Text);

    idHTTP1.Post(url, params);



    finally

     code := idhttp1.ResponseCode;
    ShowMessage(IntToStr(code));
    params.free;

Schokohase 16. Dez 2018 22:14

AW: am Webserver (PHP) anmelden
 
Das musst du den Programmierer des Webservers fragen.

DieDolly 16. Dez 2018 22:23

AW: am Webserver (PHP) anmelden
 
Zitat:

wieso wird immer der code 200 zurückgegeben? auch wenn die logindaten falsch sind?
Weil der ResponseCode nichts damit zu tun hat, ob der Login scheitert oder nicht.

Du solltest am besten mal den Wikipediaartikel zu http codes lesen.^

Ich würde es ganz anders machen.
Ich würde eine php-Datei auf dem Server anlegen die einzig dafür da ist von deinem Programm angesprochen zu werden.
Der übergibst du per POST Name und Password. Das Password am besten direkt schon gehasht so wie es auch in der Datenbank gehast ist.
Dann prüfst du in der PHP-Datei, ob ein solcher Nutzer vorhanden ist und wenn ja, ob das Passwort stimmt. Wenn eins von beiden nicht zutrifft, ist die Verarbeitung beendet und du könntest mit echo irgendwas zurückgeben was du in deinem Programm auswertest. Ansonsten loggst du den Nutzer ein und kannst auch da irgendwas echo'n, damit dein Programm weiß was los ist.

Eine direkte Verbindung zur Datenbank wäre natürlich am besten. Aber egal wie du es machst, es ist nicht sicher.

Codehunter 16. Dez 2018 22:34

AW: am Webserver (PHP) anmelden
 
Die meisten Webdienste geben bei einem formularbasierten Login den Code 200 zurück und trompeten den Login-Fehler lediglich über HTML heraus. Früher war das mal verpönt, heute aber Usus wegen der Spambots.

strom 17. Dez 2018 12:14

AW: am Webserver (PHP) anmelden
 
Könnte ich was an die idHTTP Komponente schicken?

Habt Ihr ein Beispiel für mich?

Code:

 if (password_verify($password, $row['password']) && $count==1) { 
                         $_SESSION['userSession'] = $row['user_id'];      
                         header("Location: home.php");
                               
                                  ??????????????????????????????????

DieDolly 17. Dez 2018 12:17

AW: am Webserver (PHP) anmelden
 
Guck mal wie ich das oben machen würde. So kannst du das PHP-Script "antworten" lassen.

strom 17. Dez 2018 12:45

AW: am Webserver (PHP) anmelden
 
Was meinst Du damit " Schaue oben" ? Bin schon total verwirrt:-)

Wie muss das Script aussehen bzw. der header (' '); oder ein flush(); ??????

DieDolly 17. Dez 2018 13:04

AW: am Webserver (PHP) anmelden
 
Nix davon.

Eher so

Zitat:

Zitat von DieDolly (Beitrag 1421009)
Ich würde es ganz anders machen.
Ich würde eine php-Datei auf dem Server anlegen die einzig dafür da ist von deinem Programm angesprochen zu werden.
Der übergibst du per POST Name und Password. Das Password am besten direkt schon gehasht so wie es auch in der Datenbank gehast ist.
Dann prüfst du in der PHP-Datei, ob ein solcher Nutzer vorhanden ist und wenn ja, ob das Passwort stimmt. Wenn eins von beiden nicht zutrifft, ist die Verarbeitung beendet und du könntest mit echo irgendwas zurückgeben was du in deinem Programm auswertest. Ansonsten loggst du den Nutzer ein und kannst auch da irgendwas echo'n, damit dein Programm weiß was los ist.

Eine direkte Verbindung zur Datenbank wäre natürlich am besten. Aber egal wie du es machst, es ist nicht sicher.



Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 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