|
Registriert seit: 13. Feb 2005 Ort: Könnern/MD 107 Beiträge Delphi 2006 Personal |
#16
@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:
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
<?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"; } ?> 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:
nun die proc, die die ausgabe in ein Array of Array of String ausgiebt
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;
Delphi-Quellcode:
so und nun ein Beispiel zum aufrufen und die Variablen
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;
Delphi-Quellcode:
so hoffe das is verständlich, wenn nicht einfach fragen
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; |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |