kostenloser Webspace werbefrei: lima-city


Indriekter MySQL Zugriff über PHP Skript

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabianschwarz

    fabianschwarz hat kostenlosen Webspace.

    Hallo,
    ich habe folgendes Problem:
    Bei Lima ist ja nur ein DB-User möglich, aber ich will, dass verschiedene Websites auch über verschiedene User auf die DB zugreifen. Meine Idee ist nun, ein PHP Script zu erstellen, über welches die Websites mit unterschiedlichen Usern auf die DB zugreifen können.
    Also z. B. index.php greift auf
    db.php?query=SELECT...&key=123456789
    zu.
    Habt Ihr eine Idee, wie man jetzt von der db.php die Abfrage zur index.php übermitteln kann?
    serialize()
    funktioniert leider nicht :-(
    Vielen Dank,
    Fabian
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Ich verstehe die Hintergrund des Anliegens nicht. Mehrere Nutzer einer Webanwendung erfordern doch nicht gleichzeitig auch unterschiedliche Datenbanknutzer.
  4. Autor dieses Themas

    fabianschwarz

    fabianschwarz hat kostenlosen Webspace.

    Sicherheit ist das Anliegen. Man kann zwar in den Scripten Vorkehrungen gegen SQL Injections treffen, aber bei machen fertigen CMS etc. kann man das leider nur schwer. Deswegen will ich diese "Schnittstelle" erstellen, um kristische Befehle filtern zu können.
    Desweiteren muss man dann anderen Personen, die an einer bestimmten Website beteiligt sind, nicht die Zugangsdaten für den "root"-User geben.
    Grüße,
    Fabian
  5. Hallo fabianschwarz,

    denke nicht das sowas sinnvoll ist, aber du kannst alle zurückgegebenen reihen in einem Array speichern und dann das mit json_encode zu einem json machen und ausgeben.
    index.php kann dann z.B. per curl oder file_get_contents mit dem kodiertem Querry und Api key das Json bekommen und dann mit json_decode wieder zurück zu einem Array kovertieren.

    Aber du müstest ja alle Datenbankabfragen in z.B. einem CMS ändern.
  6. Die Querys musst du natürlich auch analysieren. Zugriff ist sonst natürlich über dbxyz.tabxyz oder USE möglich.
  7. Autor dieses Themas

    fabianschwarz

    fabianschwarz hat kostenlosen Webspace.

    Hier die Lösung:

    man hat ein Script, z. B.
    https://domain.de/db.php?qkey=kdbweuhjfb&query=SELECT%20*%20FROM%20tabelle


    <?php
    $db = mysql_connect("server","USERxxxxxxx","password");
    $return = 100;
    $do = true;
    if((isset($_GET["qkey"]))AND(isset($_GET["query"]))){
    $qkey = $_GET["qkey"];
    $query = $_GET["query"];
    }else{
    $return = 500;
    $do = false;
    }
    
    /*
    Rückgabewerte:
    json wenn normal;
    100 Allgemeiner Fehler
    200 Erforderliche Rechte nicht vorhanden
    300 Key existiert nicht
    400 MySQL Fehler
    500 Anfrage nicht korrekt
    */
    if ($do){
    switch ($qkey) {
        
        case "key":
            mysql_select_db("zugewiesene DB");
            break;
        case "key":
            mysql_select_db("db_xxxxxx_2");
            if(strpos($query, "db_xxxxxx") === false){
                //bricht bei Änderung der ausgewählen DB ab -> SQL Injection würde nur die eine DB betreffen
            }else{
                $do = false;
                $return = 200;
            }
            break;    
        default:
           $return = 300;
           $do = false;
        }   
    }
    if ($do){
      
          $resultarray = array();
          $result = mysql_query($query);
          
          if (!$result){
              $return = 400;
          }else{
              while($row=mysql_fetch_object($result)){
                 $resultarray[] = $row;
              }
              $return = json_encode($resultarray);
          }
      
    }
    echo $return;
    ?>

    Funktion gibt also einen Int mit Fehlerzahl zurück oder ein json Array, welches man dann mit
    json_decode()
    normal nutzen kann

    Beitrag zuletzt geändert: 18.1.2016 21:14:35 von fabianschwarz
  8. ich hab da mal ne Gegenfrage hierzu, nutzt du ausschließlich Lima als Datenbank Server? so verstehe ich es jetzt. Du kannst dir leicht mehrere Datenbanken bei Lima zulegen und dadurch voneinander abgrenzen.

    Alternativ kannst du jeden Befehl, welcher eingegeben wird, bevor er direkt zur Datenbank geht gegen prüfen auf Richtigkeit! Um das zu gewährleisten schau einfach mal auf folgende Seite:

    https://www.shift8web.ca/blog/2015/06/securing-your-mysql-queries-from-sql-injection-in-php/

    das sollte schon ausreichen! ist zwar auf englisch aber gut erklärt!
  9. tchiarcos schrieb:
    ich hab da mal ne Gegenfrage hierzu, nutzt du ausschließlich Lima als Datenbank Server? so verstehe ich es jetzt. Du kannst dir leicht mehrere Datenbanken bei Lima zulegen und dadurch voneinander abgrenzen.

    Hier gehts um mehrere Datenbank-Nutzer, nicht um mehrere Datenbanken.
  10. muellerlukas schrieb:
    Hier gehts um mehrere Datenbank-Nutzer, nicht um mehrere Datenbanken.


    Schon klar! Deswegen hab ich ja auch noch was anderes vorgeschlagen.
    Nichts desto trotz besteht ja die Möglichkeit mehrere Datenbanken zu nutzen, was weitaus einfacher ist und die Abgrenzung der Datenbanken auch deutlich erleichtert! Durchschleifen von mehreren Seiten über eine Datenbank birgt halt immer das Risiko, dass zu viele Fehler passieren!
  11. 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!