AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Komponente: MySQL via PHP-Tunnel
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente: MySQL via PHP-Tunnel

Ein Thema von neuronet · begonnen am 8. Okt 2005 · letzter Beitrag vom 23. Mär 2021
Antwort Antwort
Seite 6 von 9   « Erste     456 78     Letzte »    
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#51

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 09:42
Ich wollte gerne wissen, ob an den "Tunnel-Komponenten" noch gearbeitet wird?!
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#52

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 10:56
anscheinend nicht, hab mir inzwischen selber n tunnel geschrieben
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#53

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 11:03
Zitat von Rociel:
anscheinend nicht, hab mir inzwischen selber n tunnel geschrieben
Magst Du den vielleicht veröffentlichen, oder ist der eher closed-source?
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#54

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 11:18
ja, weiß nicht, ob der dir was bringt, es geht bei dem lediglich um ne foreneinbindung, d.h. erst überprüfen ob der user existiert, und wenn ja, dann wird das md5(db-Passwort+irgendeinstring) übergeben um missbrauch zuvermeiden, und dann werden lediglich die geforderten werte über var_dump ausgegeben und im Prog in ein array gespeichert, also lediglich ein grundgerüst.
Mit dem auflisten im Prog bin ich noch nicht weiter weil ich noch keine erfahrung mit listboxes mit headern hab, und mom nicht die muse hab dran weiterzuarbeiten =)

also wenn noch interesse bestehen sollte, kann ich heut nachmittag dann mal den nötigen quellcode vom tunnel und vom prog reinstelln, muss jetzt erstmal zum essen und dann einkaufen.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#55

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 13:57
Also..interresse auf alle Fälle.

Mir schweben schon seit längerem Ideen durch den Kopf, die sowas sehr gut gebrauchen könnten. Insbesondere hinsichtlich Boards und/oder CMS-Systemen. Gibts ja wie Sand am Meer und die meisten
Server haben PHP/MySQL zur Verfügung. Wenn man also ne Anbindung an sowas machen möchte, braucht man
i.d.R. so einen Tunnel.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#56

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 14:13
mal ne doofe frage/idee
wieso schreibt man nicht einen mysql server emulator, der als lokaler dienst z.b. auf dem gleichen rechner läuft wie der normale mysql client, der auf den server zugreifen will, der dann alle anfragen über das php script dann weiterleitet?

also ungefär so:

mysql server -> tcp/ip oder socks -> php / phpscript -> HTTP PROTOCOL / Internet -> mysql-server-emu -> tcp/ip -> mysql client anwendung

dann müsste man evtl nur alle anfragen weiterleiten und wieder zurück und alles halbtransparent tunneln was so abläuft
dann kann man nämlich alle "normalen" mysql client librarys, direct connect quellen, datasource zeugs und andere sachen verwenden und muss da garnichts an der endanwendung/frontend ändern
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
wfoertsch

Registriert seit: 14. Jan 2005
Ort: Berlin
71 Beiträge
 
Delphi 2010 Professional
 
#57

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 14:52
Zitat von supermuckl:
mal ne doofe frage/idee
wieso schreibt man nicht einen mysql server emulator, der als lokaler dienst z.b. auf dem gleichen rechner läuft wie der normale mysql client, der auf den server zugreifen will, der dann alle anfragen über das php script dann weiterleitet?

also ungefär so:

mysql server -> tcp/ip oder socks -> php / phpscript -> HTTP PROTOCOL / Internet -> mysql-server-emu -> tcp/ip -> mysql client anwendung

dann müsste man evtl nur alle anfragen weiterleiten und wieder zurück und alles halbtransparent tunneln was so abläuft
dann kann man nämlich alle "normalen" mysql client librarys, direct connect quellen, datasource zeugs und andere sachen verwenden und muss da garnichts an der endanwendung/frontend ändern
Hi,

also das wäre mir sogar nen Hunni wert


Gruss
Wolfgang Foertsch
(\_/)
(O.o)
(> < ) <---This is Bunny. Copy Bunny into your signature to help him on his way to world domination.
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#58

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 15:09
@supermuckl sowas ist schon nicht schlecht.

aber 1. weiß ich nicht wie man dann den MySQL server emuliert

und 2. ist das prog dann für meine Leute gedacht, also würdes vllt. im Internet irgendwo schwirren, und mit dem tunnel den ich schreib, sind nur spezielle abfragen möglich die der dann ausgiebt, man hat also später dann nich auf die gesammte db zugriff wodurch es ein bisschen sicherer ist.

So hier die tunnel.php

Code:
<?php

  include "LA/phpBB2/config.php";

  $link = mysql_connect($dbhost,$dbuser,$dbpasswd) or die('DB_FAIL1');
  mysql_select_db($dbname) or die('DB_FAIL2');
   
  $aktion  = $_POST['aktion'];
  $user    = $_POST['user_name'];
  $pass    = $_POST['user_passwort'];
  $db_pass = $_POST['db_pass'];
  $abfrage = $_POST['abfrage'];
   
   if ($db_pass == md5($dbpasswd."irgendeinstring")) {$db_pass = $dbpasswd;}

switch ($aktion) {
   case "login":
     $sql = "SELECT
                COUNT(*) as Anzahl
              FROM
                phpbb_users
              WHERE
                username= 'Rociel'/* eigentlich $user */ AND user_password= '".md5($pass)."' AND user_id > 0";
//         echo $sql."\n";
          $result = mysql_query($sql) OR die('DB_FAIL3');
          $row = mysql_fetch_assoc($result);
          if($row['Anzahl']) {
                  echo md5($dbpasswd."irgendeinstring")."\n";
                  echo "U_VALID";
                  mysql_close($link);
               } else die('U_NOTVALID');
      break 1;

   case "abfrage":
     if ($abfrage != "") {
           mysql_connect($dbhost,$dbuser,$db_pass) or die('DB_FAIL1');
             mysql_select_db($dbname) or die('DB_FAIL2');
           $sql = $abfrage;
           $result = mysql_query($sql) OR die('DB_FAIL3');
            while ($row = mysql_fetch_assoc($result))
              {var_dump($row);}
         }
         else echo "Kein Query gefunden";
    
    
   }


?>
die $pass abfrage ist zur Prüfung, ob sich der User eingeloggt hat, analog einfach bei case "abfrage" $dbpasswd nutzen wenn dies nicht gewünscht ist

folgende func aufrufen um zu posten, ausgabe ist der im tunnel ausgebene wert:
hier das md5 nicht falsch verstehn, hatte vor das passwort als md5 zu senden, hab aber noch nix passendes gefunden

Delphi-Quellcode:
function TForm1.post(aktion,user:string;md5:PCHAR;abfrage:string=''):string;
var
  Strings: TStringList; //Zusammengesetze Post-Daten
  Stream:TStringStream;//Ausgabe der Aufgerufenen Seite
  ausgabe:String; //Ausgabe der aufgerufenen Seite als String
  zeile:String; //Zum zeilenweisen Ausgeben der Rückgabe der Aufgerufenen Seite benutzte Zwischenvariable
begin
  Stream:=TStringStream.Create('');//Rückgabe-Stream erstellen
  Strings := TStringList.Create; //Post-Daten-StringList erstellen
  try
    Strings.Add('aktion='+aktion);
    Strings.Add('user_name='+user); //Post-Daten in die StringList eintragen
    Strings.Add('user_passwort='+md5);
    Strings.Add('db_pass='+PASSWORT);
    Strings.Add('abfrage='+abfrage);
    try
      http.Post('http://www.meine.seite/tunnel.php', Strings,stream);//Datei abrufen //URL noch einstellen!
      ausgabe:=Stream.DataString; //Ausbage-Sring die zurückgegebenen Daten zuweisen
      zeile:=''; //Zwischenvariable leeren
    except //Fehlerbehandlung
     on E: Exception do
       showmessage('Error encountered during POST: ' + E.Message);
    end;
  finally
    ResponseMemo.Text := ausgabe;
    Strings.Free;
    Stream.Free;

    zeile := ResponseMemo.Lines.Strings[ResponseMemo.Lines.Count-1];

         if zeile = 'DB_FAIL1'    then error := DB_FAIL1
    else if zeile = 'DB_FAIL2'    then error := DB_FAIL2
    else if zeile = 'DB_FAIL3'    then error := DB_FAIL3
    else if zeile = 'U_VALID'     then begin
                   error := U_VALID;
                   ONLINE:=true;
                   PASSWORT := ResponseMemo.Lines.Strings[ResponseMemo.Lines.Count-2];
                   end
    else if zeile = 'U_NOTVALID'  then error := U_NOTVALID

    else result := ResponseMemo.Text;

    case error of
      DB_FAIL1 : ListBox1.Items.Add('Verbindung zu sql fehlgeschlagen');
      DB_FAIL2 : ListBox1.Items.Add('Verbindung zur db fehlgeschlagen');
      DB_FAIL3 : ListBox1.Items.Add('Query konnte nicht ausgeführt werden');
      U_VALID : ListBox1.Items.Add('Login OK.');
      U_NOTVALID : ListBox1.Items.Add('Login nicht OK.');
    end;

    error := NO;

// if ResponseMemo.Lines.Strings[ResponseMemo.Lines.Count-1] = 'DB_FAIL' then result :='DB_FAIL';
    
  end;
end;
nun die proc, die die ausgabe in ein Array of Array of String ausgiebt

Delphi-Quellcode:
procedure TForm1.löse(res:string;lv:TListView);
  function getArrayLength(res:string):integer; //Bestimme die Arraygröße des ersten
  var i,j:integer; //Inhaltes
  begin
    i := 1;
    j := 0;
    repeat
      if res[i]='[then inc(j);
      inc(i);
    until res[i-1] = '}';
    result:=j;
  end;

  procedure settabletop(res:string);
  var n,o,anfang,ende,quote1,quote2,quote4,z_quotes_tt:integer;
      tbltop:string;
  begin
    anfang := 0;
    ende := 0;
    n:=1;
    repeat
      if res[n]='{then anfang := n;
      if res[n]='}then ende := n;
      inc(n);
    until res[n-1]='}';
    tbltop := Copy(res,anfang+1,ende-anfang-1);

    for n := 0 to v_results - 1 do
        begin
          o:=1;
          z_quotes_tt:=0;
          quote1:=0;
          quote2:=0;
          quote4:=0;
          repeat
           if tbltop[o]='"then
                        begin
                        inc(z_quotes_tt);
                        if z_quotes_tt = 1 then quote1 := o;
                        if z_quotes_tt = 2 then quote2 := o;
                        if z_quotes_tt = 4 then quote4 := o;
                        end;
           inc(o);
          until z_quotes_tt = 4;
          tabletop[n]:=Copy(tbltop,quote1+1,quote2-quote1-1);
          tbltop := Copy(tbltop,quote4+1,length(tbltop)-quote4-1);
        end;
  end;

  procedure seperateonce(var res:string; var data:Array of string);
    procedure seperatetwice(var dataset:string);
    var l,m,z_quotes,quote3,quote4:integer;
    begin
      for l := 0 to v_results - 1 do
        begin
          m:=1;
          z_quotes:=0;
          quote3:=0;
          quote4:=0;
          repeat
           if dataset[m]='"then
                        begin
                        inc(z_quotes);
                        if z_quotes = 3 then quote3 := m;
                        if z_quotes = 4 then quote4 := m;
                        end;
           inc(m);
          until z_quotes = 4;
          data[l]:=Copy(dataset,quote3+1,quote4-quote3-1);
          dataset := Copy(dataset,quote4+1,length(dataset)-quote4-1);
        end;
    end;

  var k,anfang,ende:integer; //Teile die einzelnen Daten auf zur
      dataset:string; //Inhaltsbestimmung
  begin
    anfang := 0;
    ende := 0;
    k:=1;
    repeat
      if res[k]='{then anfang := k;
      if res[k]='}then ende := k;
      inc(k);
    until res[k-1]='}';
    dataset := Copy(res,anfang+1,ende-anfang-1);

    seperatetwice(dataset);

    res := Copy(res,ende+1,length(res)-ende-1);
  end;

var i:longint;
begin
  v_results := 0;
  for i := 1 to length(res) do
      begin
        if res[i] = '{then inc(v_results);
     end;

  v_arraylength := getArraylength(res);


  setlength(results,v_results);
  setlength(tabletop,v_results);

  settabletop(res);

  for i := 0 to v_results - 1 do
    begin
    setlength(results[i],v_arraylength);
    seperateonce(res,results[i]);
    end;

end;
so und nun ein Beispiel zum aufrufen und die Variablen
Delphi-Quellcode:
type
    Terror = (NO,DB_FAIL1,DB_FAIL2,DB_FAIL3,U_VALID,U_NOTVALID);
    .
    .
    .
    private
      PASSWORT:string[32];

var
    tabletop:Array of string; //enthält den Tabellenkopf tabletop[b]
    results:Array of Array of string; //results[0] -> erste eintrag, results[1] -> 2. ..., und results[a][b] vom a. eintrag der b. wert
    v_results,v_arraylength:integer;
  ONLINE:boolean;
  error:Terror = NO;
  Form1: TForm1;

procedure TForm1.FormCreate(Sender: TObject);
var sql:string;
begin
ONLINE := false;
post('login','USERNAME','PASSWORD im KLARTEXT');

setTabs(ONLINE);

sql := 'SELECT user_id,username FROM phpbb_users WHERE user_id < 3';

löse(post('abfrage','USERNAME','PASSWORD im KLARTEXT',sql),ListView1);

end;
so hoffe das is verständlich, wenn nicht einfach fragen
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#59

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 16:00
naja ich meine mal ein grundsätzliches projekt das alle einsatzgebiete breit abdeckt und auch sicher ist.

nicht auf ein spezielles projekt wie hier jetzt beschrieben wurde zugeschnitten - wie gesagt nur ein ideen entwurf meinerseits

ich habe leider zu wenig zeit mich da ran zu hocken (auch weil ichs selbst eigentlich nicht brauche)

aber einen server zu emulieren dürfte doch garnicht so schwer sein oder?

man muss ja nur das protocol analysieren und schauen wie die anfragen und replys usw aussehen und das dann einfach durchs php weiterreichen ohne großartige interpretation der daten und speicherung und verwaltung der selbigen.

beispiel einer anwendung, die jetzt mal ganz grob gesehen mit einem mysql server über php und emu kommunizieren würde:

mysql client connected zu emu applikation über tcp/ip
emu verwaltet diesen client nun temporär als session und nimmt query oder sonstiges ( login protocol von mysql usw) entgegen.
dieses wird verschlüsselt und an das php script auf dem webserver geschickt, wo der ziel-mysqlserver liegt
das phpscript connected über tcp/ip sockets zum mysql server und loggt sich ein bzw sendet das query im konformen mysql protocol
der server antwortet und schickt das reply an das phpscript (das script wartet bis server die ergebnismenge zurück gibt usw)
das phpscript verschlüsselt das und schickts wieder zurück an den richtigen client (session ist ja weiterhin aufgebaut)
die client application bekommt die ereignismenge

also im prinzip könnte man eigentlich den indy tcp tunnel umbauen, damit man damit rein über "strings versenden und empfangen" (die verschlüsselt sind) über php kommunizieren kann
das phpscript muss natürlich dann das gegenstück des tunnels als tcp lösung sein.
und schon ists sogar egal ob wir mysql oder was anderes da druchleiten - es kann alles auf tcp/ip basis sein

das bringt mich zu der annahme das es schon so einen tcp/ip tunnel als phpscript ja schon geben könnte?
man müsste das halt mit delphi verbinden können das das eine endstück delphi sein kann und das andere (kompatibel) php.


habe jetzt alledings nicht die zeit da großartig zu suchen aber das wäre ein lösungsweg wo so ziemlich viel erschlagen würde, was an technischen problemen so auftreten können.
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Rociel

Registriert seit: 13. Feb 2005
Ort: Könnern/MD
107 Beiträge
 
Delphi 2006 Personal
 
#60

Re: Komponente: MySQL via PHP-Tunnel

  Alt 4. Apr 2007, 16:08
hmpf, dazu müsste man sich dann mit den protokollen auseinandersetzen, wofür ich keine zeit hab, da ich noch keine erfahrungen hab was programmieren mit protokollen angeht, hatte damals nur n chat angefangen der über die socks-kompos von delphi lief....

nuja, wie gesagt, ich hoffe der quellcode ist erstmal soweit hilfreich für euch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 9   « Erste     456 78     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 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