Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Formulardaten mit IdHTTP.Post senden (https://www.delphipraxis.net/147987-formulardaten-mit-idhttp-post-senden.html)

Luckie 20. Feb 2010 02:43


Formulardaten mit IdHTTP.Post senden
 
Ziel Script login.php:
Code:
<php
   $username = htmlspecialchars($_POST['username']);

   if (isset($username)){
      echo "Hallo $username. Wie geht es dir?";
   }
   else{
      echo "Variable nicht gesetzt";
   }
?>
Zugehöriger Delphi Code:

Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var
  data: TStringList;
  s: String;
begin
  data := TStringList.Create;
  try
    data.Values['username'] := 'Erwin';
    try
      s := IdHTTP1.Post('http://www.michael-puff.de/login.php', data);
      ShowMessage(s);
    except
      on E: Exception do
        ShowMessage('Fehler: ' + E.Message);
    end;
  finally
    data.Free;
  end;
end;
Schlagworte: Indy, HTTP, Post, Formular, Formular ausfüllen

@Code Lib Manager: Wenn wir so was schon haben, kickt es in die Tonne. ;)

Valle 20. Feb 2010 10:25

Re: Formulardaten mit IdHTTP.Post senden
 
:shock:

XSS!!

Edit:// Okay, ich will den Post so leer nicht stehen lassen. Auch wenn der PHP-Code offensichtlich nur ein Beispiel ist, so bitte ich doch darum, dort keine Sicherheitslücken einzubauen. Das Ausgaben der Variable $_POST['username'] kann in einer XSS-Attacke enden, die im schlimmsten Falle zur Kompromittierung eines Benutzeraccounts der entsprechenden Seite führen kann. Also bitte ein htmlspecialchars() um die Variable in Zeile 5!

Liebe Grüße,
Valle

Luckie 20. Feb 2010 12:00

Re: Formulardaten mit IdHTTP.Post senden
 
Richtig, um den PHP Code ging es mir nicht.

Valle 20. Feb 2010 14:04

Re: Formulardaten mit IdHTTP.Post senden
 
Okay, ihr dürft mich schlagen wenn ihr wollt, aber ich muss nochmal am eigentlich nur beispielhaften PHP-Code meckern. :mrgreen:

Die Variable $username ist immer gesetzt. Schließlich definierst du sie in Zeile 2 ja unabhängig vom Inhalt der _POST-Variable. Daher schlage ich einfach folgenden Code - mit fehlendem Fragezeichen im PHP-Tage - vor. ;-)

Code:
<?php

    if ($_POST['username']) {
        $username = htmlspecialchars($_POST['username']);
        echo "Hallo $username. Wie geht es dir?";
    } else {
        echo "Variable nicht gesetzt";
    }
Ich hoffe ich bin nicht der einzige, der der Meinung ist, dass auch
rhetorischer Beispielcode seine Richtigkeit haben darf... :duck:

Liebe Grüße,
Valle

Matze 20. Feb 2010 14:16

Re: Formulardaten mit IdHTTP.Post senden
 
Das Ganze wird später eh bereinigt, daher frage ich auch ganz kurz was dazu:

Ist "if ($_POST['username'])" sauber? Ich nutze immer "if (isset($_POST['username']))".
Wäre $_POST['username'] = 0 (die Zahl Null), würde dein Beispiel Valle, nicht funktionieren, da die if-Abfrage "false" wird.

Das Beispiel selbst finde ich für die CL gut geeignet. Aber ich stimme Valle zu, dass der Code sicher sein sollte. Nicht, dass es jemand falsch nachbaut. ;)

Valle 20. Feb 2010 15:25

Re: Formulardaten mit IdHTTP.Post senden
 
Zitat:

Zitat von Matze
Ist "if ($_POST['username'])" sauber?

Mh nein, natürlich nicht. :?

Ich habe den Code selbst geschrieben statt ihn von Luckie zu kopieren und dabei das isset vergessen. Zum Prüfen ob es gesetzt ist, ist isset() oder array_key_exists() geeignet. Oft ist strlen(trim(...)) > 0 aber sinnvoller, um auf eine nicht-leere Formulareingabe zu prüfen. In diesem Fall ist das aber egal. :-)

Zitat:

Zitat von Matze
Aber ich stimme Valle zu, dass der Code sicher sein sollte. Nicht, dass es jemand falsch nachbaut. ;)

:firejump:

Liebe Grüße,
Valle


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