Zurück   PSD-Tutorials.de > Webbereich > PHP und andere Scriptsprachen


Antwort
 
Themen-Optionen
Alt 27.06.2012, 13:20   #1 Nach oben scrollen
Helper
HelperHelper
 
Benutzerbild von KasselJulian
 

Registriert seit: 30.08.2010
Beiträge: 299

Datenbankzugriff einschränken

Hallo,

ich möchte ein Script schreiben, dass die Verwendung von Erweiterungen (Modulen/Plugins) erlaubt. Diese dürfen auch Datenbankzugriff erhalten, jedoch nur für eine für sie erstellte Tabelle.
Das ist nicht so einfach, denn ich initialisiere für das "Core-Script" bereits in eine Variable ein Objekt, dass Zugriff auf alle Tabellen der Datenbank hat. Nun könnte ich zwar eine Klasse schreiben, die eine Lösung nur für die Erweiterungen darstellt, jedoch könnte die Erweiterung ja auch mit "global" auf das initialisierte Objekt/Variable zugriff erhalten und damit wäre alles für die Katz.

Daher, wie realisiert man ein Script, dass Erweiterungen verwendet, diese jedoch nur Zugriff auf deren interne Tabelle erhalten sollen?
(Im Beispiel: Facebook-Anwendungen können auch Daten speichern, jedoch auch hier nur in der eigenen Tabelle und erhalten auch keinen Zugriff auf andere Daten in der Datenbank. Dieses Prinzip möchte ich verfolgen, doch wie?)
__________________
Hallo Welt
  Mit Zitat antworten


Alt 27.06.2012, 13:45   #2 Nach oben scrollen
Posting-Frequenz: 14µHz
Premium-SupporterPremium-SupporterPremium-SupporterPremium-SupporterPremium-Supporter
 
Benutzerbild von Duddle
 

Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.262
AW: Datenbankzugriff einschränken
Spontan fällt mir ein, dass mit Account-Rechten zu lösen, die den Zugriff beschränken.

Sagen wir ein PlugIn Foo wird in der Datenbank Bar installiert. Zuerst werden normal die Tabellen Bar.Tab_1, Bar.Tab_2, etc. erstellt. Dann wird ein exklusiver Account für Foo erstellt. Zuletzt werden ihm alle benötigten Rechte für die soeben erstellten Tabellen zugewiesen.

Die verlinkten Artikel zeigen auf die MySQL-Syntax. Falls dir das zu unübersichtlich ist, gibt es einige Tutorials bzgl. der Nutzer- und Rechteverwaltung. Beispiele:
http://www.html-world.de/program/mysql_8.php
http://www.internist-schmidt-lohfeld...er%20MySQL.htm
http://www.phphq.de/mysql.de/manual.de_207.html


Duddle
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall
  Mit Zitat antworten
Alt 29.06.2012, 12:58   #3 Nach oben scrollen
Helper
HelperHelper
Themenstarter
 
Benutzerbild von KasselJulian
 

Registriert seit: 30.08.2010
Beiträge: 299
AW: Datenbankzugriff einschränken
Danke, Account-Rechte für den MySQL-Zugriff sind eine gute Idee, jedoch lösen sie das Hauptproblem nicht.
Wenn ich am Anfang des Scriptes sagen wir mal mit der Variable $connection eine Verbindung mit dem MySQL-Benutzer erstelle, der Zugriff auf alle Tabellen habe und der Variable $connection_erweiterungen eine Verbindung des Benutzers aufbaue, der Zugriff auf nur eine Tabelle der Datenbank hat, habe ich zwar geregelt wer was auslesen und inserieren kann, jedoch:
Kann die Erweiterung ja durch "global" oder sonst wie auf die Variable $connection zugreifen und damit hat sie Zugriff auf alle Tabellen.

Wie kann ich das umgehen?
__________________
Hallo Welt
  Mit Zitat antworten
Alt 29.06.2012, 13:56   #4 Nach oben scrollen
Posting-Frequenz: 14µHz
Premium-SupporterPremium-SupporterPremium-SupporterPremium-SupporterPremium-Supporter
 
Benutzerbild von Duddle
 

Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.262
AW: Datenbankzugriff einschränken
Wenn du davon ausgehst, dass deine PlugIn-Entwickler die Namen aller deiner Variablen und Klassen kennen, gibt es ziemlich viele potenzielle Sicherheitslücken.

Ich finde jedenfalls kein Best Practice dafür. Mein Ansatz wäre wohl, Verbindungen zu Datenbanken mit wichtigen Daten nach Verwendung explizit zu schliessen bzw. die Variable zu nullen.


Duddle
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall
  Mit Zitat antworten
Alt 29.06.2012, 14:10   #5 Nach oben scrollen
Helper
HelperHelper
Themenstarter
 
Benutzerbild von KasselJulian
 

Registriert seit: 30.08.2010
Beiträge: 299
AW: Datenbankzugriff einschränken
Dann müsste ich aber ja für 30 querys in einem Scriptablauf 30 Verbindungen neu erstellen, dass zieht wahrscheinlich unheimlich an Performance.
Ich denke nicht, dass die Hersteller von Facebook eine solche Sicherheitslücke nicht schließen konnten. Da gibts sicherlich eine Variante.
__________________
Hallo Welt
  Mit Zitat antworten
Alt 29.06.2012, 20:51   #6 Nach oben scrollen
Posting-Frequenz: 14µHz
Premium-SupporterPremium-SupporterPremium-SupporterPremium-SupporterPremium-Supporter
 
Benutzerbild von Duddle
 

Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.262
AW: Datenbankzugriff einschränken
Gut, es ist schon ein deutlicher Sprung von "wie könnte das denn funktionieren?" zu "dutzende von Spezialisten bei FaceBook haben eine Lösung entwickelt"

Aus Interesse habe ich mir mal grob angeschaut, was FaceBook nach aussen anbietet. Da ich selbst keinen Account habe, konnte ich mir kein richtiges fertiges Beispiel anschauen um es in Aktion zu sehen. Die HowTos geben aber einen guten Überblick:

Falls ich das richtig verstehe, haben App-Entwickler ihren Code auf einem eigenen Server und registrieren die URL davon bei FB. Zwischen diesen beiden Endpunkten (Seite der App <-> FaceBook) wird dann ausschließlich über die API kommuniziert. Das heißt, wenn ein FB-Nutzer die App nutzen möchte, sucht FB den Endpunkt und fragt dort nach den notwendigen Informationen.

Sobald das über die APIs läuft, ist die Abgrenzung verschiedener Module kein Problem mehr. Deine Frage tritt nur auf, wenn du den PlugIn- bzw. App-Code z.B. per include() direkt bei dir selbst ausführst.


Duddle
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall

Geändert von Duddle (29.06.2012 um 20:54 Uhr).
  Mit Zitat antworten
Alt 01.07.2012, 11:48   #7 Nach oben scrollen
Helper
HelperHelper
 

Registriert seit: 06.06.2009
Beiträge: 265
Kamera: Lumix DMC-TZ3
Verwendet: Photoshop CS4, Nodepad++, Eclipse, Gimp,...
AW: Datenbankzugriff einschränken
Also das auf globale Variablen zugegriffen werden kann, kann man nur verhindern, wenn man erst gar keine Globalen Variablen verwendet.

Den eingeschränkten Zugriff kann man eigentlich nur erreichen, indem man entweder für jedes Plugin eine eigene Datenbank anlegt. (z.B.: SQLite ) und dann dem Plugin nur auf eine solche Datenbank eine Verbindung übergibt, oder du musst eine Art API schreiben, über die man auf erstellte Tabellen zugreifen kann. Das ist dann aber für die Entwickler nicht ganz so schön, da man dann nur bestimmte von der Software vorbereitete SQL-Abfragen ausführen kann.
  Mit Zitat antworten
Alt 01.07.2012, 12:35   #8 Nach oben scrollen
Helper
HelperHelper
Themenstarter
 
Benutzerbild von KasselJulian
 

Registriert seit: 30.08.2010
Beiträge: 299
AW: Datenbankzugriff einschränken
Zitat:
Zitat von ChrisvA Beitrag anzeigen
Also das auf globale Variablen zugegriffen werden kann, kann man nur verhindern, wenn man erst gar keine Globalen Variablen verwendet.
Die erste Aussage interessiert mich: Wie kann ich verhindern, dass global auf Variablen in Funktionen zugegriffen werden kann?
__________________
Hallo Welt
  Mit Zitat antworten
Alt 01.07.2012, 12:48   #9 Nach oben scrollen
Helper
HelperHelper
 

Registriert seit: 06.06.2009
Beiträge: 265
Kamera: Lumix DMC-TZ3
Verwendet: Photoshop CS4, Nodepad++, Eclipse, Gimp,...
AW: Datenbankzugriff einschränken
Ich würde mal behaupten gar nicht, entweder eine Variable ist Global, oder sie ist es nicht, in der Form wie in C, dass man da noch Variablen auf eine Datei beschränken kann, wäre mir in PHP neu.

Entweder du musst also den Skripten ein gewisses "vertrauen" entgegenbringen, oder was besser ist, komplett auf globale Variablen verzichten.

Der Verzicht könnte funktionieren, indem du nur eine einzige Funktion aufrufst, die alles regelt, diese Funktion kann mittels statischer Variablen sicherstellen, dass sie auch nur ein einziges mal (von dir) aufgerufen wird, alle weiteren Aufrufe werden dann verworfen.

Wobei ich mich dann auch nicht so tief in PHP aus kenne, ob man auch hier irgendwelche Methoden hat an die Variablen ran zukommen.

Gerade MySQL Zugangsdaten müssen ja irgendwo gespeichert werden und man kann nicht verhindern, dass von einem anderen Skript einfach die Datei aufgerufen wird und die Daten für eine eigene Verbindung ausgelesen werden.

Falls du den Skripten nicht "vertrauen" kannst, bleibt wohl nur der Weg über eine API, z.B. über XML.
  Mit Zitat antworten
Alt 01.07.2012, 13:25   #10 Nach oben scrollen
Posting-Frequenz: 14µHz
Premium-SupporterPremium-SupporterPremium-SupporterPremium-SupporterPremium-Supporter
 
Benutzerbild von Duddle
 

Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.262
AW: Datenbankzugriff einschränken
Zitat:
Zitat von ChrisvA Beitrag anzeigen
Gerade MySQL Zugangsdaten müssen ja irgendwo gespeichert werden und man kann nicht verhindern, dass von einem anderen Skript einfach die Datei aufgerufen wird und die Daten für eine eigene Verbindung ausgelesen werden.
Genau das ist das Problem. PHP ist es egal, ob eingebundener Code von einer fremden Quelle stammt oder nicht. Einzelne Module können also auf alle Möglichkeiten von PHP zugreifen. Dazu zählen eben auch Variablen.

Deshalb fall mir für diesen Fall nur drei Optionen ein:
  1. dem Code vertrauen
  2. den Zugriff auf den Hauptcode zulassen, aber vor dem Ausführen von Fremd-Code alle wichtigen Variablen zu löschen
  3. die Module untereinander isolieren und die Kommunikation nur über Schnittstellen erlauben


Duddle
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall
  Mit Zitat antworten
Alt 01.07.2012, 13:36   #11 Nach oben scrollen
Helper
HelperHelper
 

Registriert seit: 06.06.2009
Beiträge: 265
Kamera: Lumix DMC-TZ3
Verwendet: Photoshop CS4, Nodepad++, Eclipse, Gimp,...
AW: Datenbankzugriff einschränken
Variablen aus dem Code löschen würde ich erst gar nicht versuchen,mit eval() oder $$var hat man viel zu viele Möglichkeiten so etwas am Löscher vorbei zu schmuggeln.
  Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Windows PC, Benutzerrechte Einschränken tobsik Hardware, Zubehör & technische Fragen 12 21.01.2012 18:43
[CS5] wo einschränken : bildgröße - auflösung - bit ? averau Photoshop 22 03.07.2011 19:18
Windows 7 - Benutzerkonto einschränken alexanderhey Hardware, Zubehör & technische Fragen 15 15.03.2011 08:40