kostenloser Webspace werbefrei: lima-city


MYSQL Spalteninhalt in Variable übertragen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    burningwheels

    burningwheels hat kostenlosen Webspace.

    Ich möchte den Inhalt der Spalte "activation" aus der Tabelle "account" von einem bestimmten User auslesen und den Inhalt dieser Spalte an eine Variable (php) übergeben um diese dann zu vergleichen ob der Inhalt gleich "active" ist.

    Mein Code sieht momentan so aus:

    $status = "SELECT activation
    	FROM account
    	WHERE name = '".$_GET["name"]."'#
    	AND akey = '".$_GET["akey"]."' ";
    
    if($status == 'active')
    {
    	echo 'Ihr Account ist bereits aktiviert.';
    }


    Doch aus irgendeinem Grund bleibt die Seite beim Aufruf einfach komplett weiß.

    Das ganze soll eine Accountaktivierung via EMail sein.
    Ohne diese Abfrage funktioniert der restliche Code um den Account von "waiting" auf "active" zu stellen.
    Aber es soll nun eben diese Meldung bringen fals der Account bereits aktiviert ist, doch nun tut sich einfach garnichts mehr.

    Kann mir da jemand weiterhelfen?

    Danke schonmal im voraus.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Hier fehlt das:
    $status = mysql_result(mysql_query($status), 0);

    Es sollte also das stehen:
    $sql = "SELECT activation FROM account WHERE name = '".mysql_real_escape_string($_GET["name"])."' AND akey = '".mysql_real_escape_string($_GET["akey"])."' ";
    $status = mysql_result(mysql_query($sql), 0);
    if($status == 'active')
    	echo 'Ihr Account ist bereits aktiviert.';


    Beitrag zuletzt geändert: 12.4.2012 16:01:57 von hackyourlife
  4. s*************h

    Das kann so überhaupt nicht funktionieren. Falls du ein wenig Ahnung von PHP hast müsstest du wissen das du den SQL-Befehl noch ausführen musst (dies wird nicht automatisch erledigt). Mit folgendem Code sollte es aber gehen:
    <?php
    $sql = "SELECT activation FROM account WHERE name = '".$_GET["name"]."' AND akey = '".$_GET["akey"]."' ";
    
    //Verbindung zum Datenbank-Server herstellen.
    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    
    //pruefen ob eine Verbindung hergestellt werden konnte.
    if (!$link) {
        die('Keine Verbindung möglich: ' . mysql_error());
    }
    
    //Auswaehlen der Datenbank und pruefen ob diese ausgewaehlt werden konnte.
    if (!mysql_select_db('database_name')) {
        die('Konnte Schema nicht selektieren: ' . mysql_error());
    }
    
    //SQL-befehl ausfuehren.
    $result = mysql_query($sql);
    
    //Pruefen ob der Befehl ausgefuehrt werden konnte.
    if (!$result) {
        die('Konnte Abfrage nicht ausführen:' . mysql_error());
    }
    
    //Status aus der Ergebnismenge ermitteln.
    $status = mysql_result($result, 0);
    
    //Pruefen ob der Status aktiv ist.
    if($status == 'active')
    {
    	echo 'Ihr Account ist bereits aktiviert.';
    }
    ?>

    Die Datenbankeinstellungen musst du natürlich noch anpassen sowie auch den Namen der Datenbank.

    Gruß S.Brosch
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    software-brosch schrieb:
    Mit folgendem Code sollte es aber gehen
    Wobei du hier SQL-Injections ermöglichst, indem du
    $_GET
    -Daten direkt in die SQL-Abfrage einbaust.
  6. Autor dieses Themas

    burningwheels

    burningwheels hat kostenlosen Webspace.

    Das mit dem Datenzugriff ist alles erledigt, ich habs nur noch für nötig gehalten dass da mit reinzuschreiben, dachte das erklärt sich eig von alleine dass es da dabei war :D Schließlich funktioniert der restliche Code ja, erst seit die Abfrage drin ist ob activation bereits auf active steht bleibt die seite weiß.

    Habe den Lösungsansatz von [hackyourlife] verwendet, jedoch bleibt die Seite nach wie vor weiß.

    Hier nochmal der komplette Coder der activation.php.
    Der Datenbankzugriff geschieht über die common.php.

    <?php
    require_once "common.php";
    
    $check = "SELECT uid
    		  FROM account
    		  WHERE name = '".$_GET["name"]."'
    		  AND akey = '".$_GET["akey"]."' ";
    		  
    $qry = mysql_query($check) or die ("FEHLER: User nicht vorhanden. ".mysql_error());
    
    
    $sql = "SELECT activation FROM account WHERE name = '".mysql_real_escape_string($_GET["name"])."' AND akey = '".mysql_real_escape_string($_GET["akey"])."' ";
    
    $status = mysql_result(mysql_query($sql), 0);
    if($status == 'active')
    {
    	echo 'Ihr Account ist bereits aktiviert.';
    }
    else
    {
    	$result = mysql_query("UPDATE account SET activation = 'active' WHERE name = '".$_GET["name"]."' AND akey = '".$_GET["akey"]."' ");
    
    	if($result)
    	{
    		echo 'Ihr Account ist nun aktiviert.<br>
    			  Wir w&uuml;nschen Ihnen viel Vergn&uuml;gen bei Burning Wheels'.
    	}
    	else
    	{
    		echo 'Es ist ein Fehler aufgetreten beim Aktivieren Ihres Accounts.<br>
    			  Bitte wenden Sie sich an einen Administrator.';
    	}
    }
    
    footer();
    ?>
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    burningwheels schrieb:
    Habe den Lösungsansatz von [hackyourlife] verwendet, jedoch bleibt die Seite nach wie vor weiß.
    Dann könnte es helfen Fehlermeldungen zu aktivieren.

    Beitrag zuletzt geändert: 12.4.2012 16:09:08 von hackyourlife
  8. s*************h

    Hast du die Fehlerausgabe aktviert?
    <?php error_reporting(E_ALL); ?>

    Falls nicht was gibt diese aus?

    Es sollte laut dem Code immer etwas ausgegeben werden egal ob ein Fehler auftritt oder nicht. Ansonsten wenn mit der oben genannten Zeile kein Fehler ausgegeben wird, füge doch einfach ein die("HALLO"); vin oben nach unten ein und prüfe ab wann diese Meldung nicht mehr kommt. So mach ich es wenn ich komische Fehler habe (Debbuging für Arme :biggrin:).

    Gruß S.Brosch
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    software-brosch schrieb:
    Ansonsten wenn mit der oben genannten Zeile kein Fehler ausgegeben wird, füge doch einfach ein die("HALLO"); vin oben nach unten ein und prüfe ab wann diese Meldung nicht mehr kommt. So mach ich es wenn ich komische Fehler habe (Debbuging für Arme :biggrin:).
    Hier wird sicher ein Fehler/Warning ausgegeben, da sonst das Script nicht abbrechen würde (was ja der Fall ist).
  10. Autor dieses Themas

    burningwheels

    burningwheels hat kostenlosen Webspace.

    Alles klar habs gefunden. Fehler wurde angezeigt in folgendem Code:

    if($result)
    	{
    		echo 'Ihr Account ist nun aktiviert.<br>
    			  Wir w&uuml;nschen Ihnen viel Vergn&uuml;gen bei Burning Wheels'.
    	}


    Man siehe der Punkt hinter dem ' ...
    Typischer ; Fehler ^^

    Vielen dank für die Hilfe und danke für die Tipps wegen der SQL Injektion.

    Die Fehlerausgabe zu aktivieren sollte ich mir für später merken :D

    Beitrag zuletzt geändert: 12.4.2012 16:35:40 von burningwheels
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    burningwheels schrieb:
    Typischer ; Fehler ^^
    Typischer Anfängerfehler... :biggrin:

    burningwheels schrieb:
    Vielen dank für die Hilfe und danke für die Tipps wegen der SQL Injektion.
    Die Funktion
    mysql_real_escape_string()
    musst du allerdings überall einsetzen wo du
    $_GET
    oder
    $_POST
    für eine SQL-Abfrage verwendest. Erst wenn das überall gefiltert wird ist deine Seite sicher.
  12. s*************h

    hackyourlife schrieb:
    Die Funktion
    mysql_real_escape_string()
    musst du allerdings überall einsetzen wo du
    $_GET
    oder
    $_POST
    für eine SQL-Abfrage verwendest. Erst wenn das überall gefiltert wird ist deine Seite sicher.

    Du kannst dir auch eine Datenbankklasse schreiben und dabei immer den gesamten SQL-Befehl mit
    mysql_real_escape_string()
    maskieren. So sparst du dir jedesmal diese langen SQL-Abfragen.

    Gruß S.Brosch
  13. Autor dieses Themas

    burningwheels

    burningwheels hat kostenlosen Webspace.

    Glaub das is bei mir in der aktivierungs php nicht wirklich von nöten, da ich die Variablen via URL übergebe ... Dient wie gesagt zur aktivierung des accounts nach der registration via email über nen link der dann so aussieht: www.burningwheels.lima-city.de/activation.php?name=username&akey=123456789

    oder kann man eine SQL Injektion auch über die URL ausüben?
  14. s*************h

    Natürlich! Den die Parameter welche du hinter dem ? übergibst sind die globale Parameter in der Variablen
    $_GET
    . Es kann also jemand die Werte der Parameter hinter der URL ändern und so eine SQL-Injection vornehmen. Von daher ist eine Überprüfung dieser Werte eigentlich zwingend notwendig wenn man einigermaßen sicher programmieren möchte.

    Der Parameter akey in der URL ist in PHP die superglobale Variable
    $_GET['akey']
    .

    Gruß S.Brosch
  15. Autor dieses Themas

    burningwheels

    burningwheels hat kostenlosen Webspace.

    Ah okay alles klar. Wusste zwar dass man über Formulare und ähnliches eine SQL Injektion vornehmen kann, habe jedoch nicht gesagt dass das auch über die URL funktioniert. Naja bin eben noch relativ neu in Sachen PHP. Hab das leider in meiner schulischen Ausbildung als technischer Assistent für Informatik nur grob gelernt.

    Gut, da das ganze irgendwann mal ein Browsergame werden soll, muss ich da natürlich auch darauf achten dass alles möglichst sicher ist =)
  16. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    burningwheels schrieb:
    oder kann man eine SQL Injektion auch über die URL ausüben?
    SQL-Injections lassen sich ausführen, sobald Benutzereingaben (egal ob von
    $_GET
    oder
    $_POST
    ) direkt und ungefiltert in den SQL-String übertragen werden.

    software-brosch schrieb:
    Du kannst dir auch eine Datenbankklasse schreiben und dabei immer den gesamten SQL-Befehl mit
    mysql_real_escape_string()
    maskieren.
    Wie darf man sich das vorstellen?

    Etwa so:
    $sql = "SELECT * FROM tabelle WHERE xyz = '{$_GET['parameter']}'";
    $result = mysql_query(mysql_real_escape_string($sql));
    Das wird nicht das Ergebnis bringen das du dir erwartest!

    burningwheels schrieb:
    Wusste zwar dass man über Formulare und ähnliches eine SQL Injektion vornehmen kann, habe jedoch nicht gesagt dass das auch über die URL funktioniert.
    Stell dir mal vor du hast bei deinem Formular das Attribut
    method="get"
    .
    Dann werden die Formulardaten in die URL übertragen...
  17. Autor dieses Themas

    burningwheels

    burningwheels hat kostenlosen Webspace.

    hackyourlife schrieb:
    burningwheels schrieb:
    oder kann man eine SQL Injektion auch über die URL ausüben?
    SQL-Injections lassen sich ausführen, sobald Benutzereingaben (egal ob von
    $_GET
    oder
    $_POST
    ) direkt und ungefiltert in den SQL-String übertragen werden.


    D.h. auch wenn es nur ein SQL-String zum auslesen der Informationen ist und keiner um dort etwas zu verändern ist trotzdem ein SQL Injekt möglich?
  18. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!