Indriekter MySQL Zugriff über PHP Skript
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
allgemeiner fehler
anliegen
array
befehl
break
code
datenbank
erstellen
fehler
folgendes problem
gegenfrage
idee
index
normal nutzen
nutzer
server
sicherheit
url
zugreifen
zulegen
-
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
zu.db.php?query=SELECT...&key=123456789
Habt Ihr eine Idee, wie man jetzt von der db.php die Abfrage zur index.php übermitteln kann?
funktioniert leider nichtserialize()
Vielen Dank,
Fabian
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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.
-
Die Querys musst du natürlich auch analysieren. Zugriff ist sonst natürlich über dbxyz.tabxyz oder USE möglich.
-
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
normal nutzen kannjson_decode()
Beitrag zuletzt geändert: 18.1.2016 21:14:35 von fabianschwarz -
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! -
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. -
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! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage