![]() |
|
|
Themen-Optionen |
|
|
#1
|
|
Helper
![]() ![]() Registriert seit: 30.08.2010
Beiträge: 250
|
Datenbankzugriff einschränkenHallo,
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?)
__________________
![]()
|
|
|
|
#2
|
|
Posting-Frequenz: 14µHz
![]() ![]() ![]() ![]() ![]() Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.225
|
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 |
|
|
|
#3
|
|
Helper
![]() ![]() Themenstarter
Registriert seit: 30.08.2010
Beiträge: 250
|
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?
__________________
![]()
|
|
|
|
#4
|
|
Posting-Frequenz: 14µHz
![]() ![]() ![]() ![]() ![]() Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.225
|
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 |
|
|
|
#5
|
|
Helper
![]() ![]() Themenstarter
Registriert seit: 30.08.2010
Beiträge: 250
|
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.
__________________
![]()
|
|
|
|
#6
|
|
Posting-Frequenz: 14µHz
![]() ![]() ![]() ![]() ![]() Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.225
|
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). |
|
|
|
#7
|
|
Helper
![]() ![]() Registriert seit: 06.06.2009
Beiträge: 265
Kamera: Lumix DMC-TZ3Verwendet: Photoshop CS4, Nodepad++, Eclipse, Gimp,... |
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. |
|
|
|
#8
|
|
Helper
![]() ![]() Themenstarter
Registriert seit: 30.08.2010
Beiträge: 250
|
Die erste Aussage interessiert mich: Wie kann ich verhindern, dass global auf Variablen in Funktionen zugegriffen werden kann?
__________________
![]()
|
|
|
|
#9
|
|
Helper
![]() ![]() Registriert seit: 06.06.2009
Beiträge: 265
Kamera: Lumix DMC-TZ3Verwendet: Photoshop CS4, Nodepad++, Eclipse, Gimp,... |
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. |
|
|
|
#10
|
|
|
Posting-Frequenz: 14µHz
![]() ![]() ![]() ![]() ![]() Registriert seit: 03.02.2006
Ort: Dresden
Beiträge: 3.225
|
Zitat:
Deshalb fall mir für diesen Fall nur drei Optionen ein:
Duddle
__________________
»To a cosmologist, a hundred thousand light-years rounds down to zero.« - RobotRollCall |
|
|
|
|
#11
|
|
Helper
![]() ![]() Registriert seit: 06.06.2009
Beiträge: 265
Kamera: Lumix DMC-TZ3Verwendet: Photoshop CS4, Nodepad++, Eclipse, Gimp,... |
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.
|
|
![]() |
| 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 |
-
Reklame
-
-
- WPTouch Anwendungsbeispiele?
- Bestimmte Pixel in HTML anfragen
- Alpha-Maske schwarz statt transparent
- Fotoseite auf Homepage
- Fit machen für den Webbereich
- Wordpress Experten für längerfristige Zusammenarbeit gesucht
- Ist PSE die Lightversion von PS?
- Filter Topaz Clean
- CS6 Bridge - Programm auswählen, das geöffnet werden soll
- Schneller Blitz für Sportfotographie
- Neu hier - Freu mich hier zu sein...
- eigene Form nicht als Fläche extrudieren - sondern als Rohr
- gestern erst neu dazu gekommen
- Link aus InDesign zu Anker in PDF
- Logo über slideshow
- Probleme mit öffnen von Bildern
- Neu hier
- Animation einer Jalousie.
- einige css elemente nur in bestimmten browsern anzeigen?
- S/W Logo in glühende Metallplatte Stanzen
-
-
Aktuelles Commag
Anzeige
-
-
- Abstimmen für [2D] Fortgeschrittenen Monatscontest Mai 2013
- Heute (20.05.) Webinar um 19.30 Uhr
- Abstimmen für 2. HDR/LDR-Fotocontest 2013 "Es war einmal" [Voting]
- Abstimmen für 21. Foto-Kreativcontest Gegensätze "hell-dunkel"
- Adobe Camera Raw 8.1 für CS6 auf Adobe Labs in einer Beta-Version
- News-Archiv
-
-
Anzeige












Social Media