| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

15-07-2010, 21:44
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Arbeiten mit (Pseudo)Packages
Hallöchen liebe PHPler,
ich möchte mich ein bisschen in das Thema der Package/Plugin/Modul/Nennt-es-wie-ihr-wollt-Thematik einarbeiten.
Im Grunde möchte ich für ein Projekt versuchen, die Möglichkeit zu bieten, Plugins zu installieren etc.
Am liebsten wäre mir dafür vorallem, dass man die Plugins gezipped (oder andersartig komprimiert) hochladen kann, und sozusagen wirklich ein gebündeltes Modul hat, welches man ganz einfach erstellen kann und hochlädt.
Beim Installieren kann es ja entpackt werden und die Daten und Ordner angelegt werden, die es enthält.
Wie startet man sowas am besten? Ich habe schon die Pluginstruktur und Datenbank, mir fehlt quasi nur noch die Installation von eben diesen komprimierten Modulen.
|

15-07-2010, 21:51
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
|

15-07-2010, 21:54
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.309
|
|
Als Allererstes solltest du dir Gedanken über mögliche Sicherheitsrisiken machen. Denn bei einem schlampig programmierten Modul bekommst du riesengroße Probleme. Noch schlimmer ist es, wenn jemand ein Hack-Modul einschleust.
Überleg dir also zuerst, welche Sicherheitsmechanismen du einbaust, bevor du dich an die Umsetzung wagst.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

16-07-2010, 09:27
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Okay, wo wir grade davon sprechen. Du hast mich natürlich wie so oft direkt dort getroffen wo ich am wenigsten geplant habe ;-) Momentan kann ich Plugins ohne Probleme laden, auch Abhängigkeiten berücksichtigt etc.
Die Frage nach der Sicherheit kam noch garnicht auf. Ist aber auch ein schweres Thema, momentan bin ich auf folgendem Stand;
Ich denke das gefährlichste "Hacking"-Plugin wäre ein solches, welches Schaden an der Datenbank verursacht oder Daten anderer Plugins ausliest oder ändern kann.
Daher darf jedes Plugin sich Tabellen erstellen (das wird beim Installieren über eine .xml erledigt) und dann auch nur diese Tabellen verwenden, sprich jeder Zugriff auf die Tabellen anderer Plugins oder des Systems selbst wird verhindert.
Die Frage nach den Funktionen der Plugins ist so eine Sache, im Grunde möchte ich es schaffen, dass wirklich jedes Plugin prinzipiell ALLES machen darf, solange es eben nur das Plugin selbst betrifft. Ich möchte eigentlich davon absehen, ein Framework an Funktionen zur Verfügung zu stellen, da ich damit immer die Kreativität der Entwickler einschränke.
Bleibt das Problem, was ein Plugin an sich schädliches ausrichten könnte, wenn die Sache mit der Datenbank so klappt wie ich es oben erklärt habe.
|

16-07-2010, 10:02
|
|
ThemBones
Registrierter Benutzer
|
|
Registriert seit: Nov 2005
Beiträge: 131
|
|
Zitat:
Zitat von ApoY2k
Daher darf jedes Plugin sich Tabellen erstellen (das wird beim Installieren über eine .xml erledigt) und dann auch nur diese Tabellen verwenden, sprich jeder Zugriff auf die Tabellen anderer Plugins oder des Systems selbst wird verhindert.
...
Ich möchte eigentlich davon absehen, ein Framework an Funktionen zur Verfügung zu stellen
|
Ein "Etwas", das nicht zumindest lesend auf die Daten der Anwendung zugreifen darf und/oder irgendeine API anspricht, ist nach meinem Verständnis aber kein Plugin sondern eine eigenständige Anwendung
|

16-07-2010, 10:03
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Man kann zwar relativ einfach sicherstellen, dass ein Plugin nur die eigenen Tabellen benutzt, ich halte das allerdings für keine gute Idee. Stell dir mal vor du speicherst User/Accounts in einer User-Tabelle. Ein Plugin soll nun das Benutzerprofil erweitern. Dann wird es sicherlich Joins mit der User-Tabelle machen müssen. Wenn du das verbietest, muss das Plugin sich die User über eine PHP-Funktion (der Basisapplikation oder eines anderen Plugins) holen. Ohne Join wird das schnell zum Performanceproblem.
Außerdem hat die Basisapplikation oder ein anderes Plugin z.B. eine Funktion zum Löschen eines Benutzers. Wie willst du sicherstellen, dass diese Funktion nicht von einem "unbefugten" Plugin aufgerufen wird?
|

16-07-2010, 10:10
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Zitat:
Zitat von ThemBones
Ein "Etwas", das nicht zumindest lesend auf die Daten der Anwendung zugreifen darf und/oder irgendeine API anspricht, ist nach meinem Verständnis aber kein Plugin sondern eine eigenständige Anwendung 
|
Hmja ich habs vielleicht falsch erklärt. Im Grunde soll jedes Plugin für sich eine eigenständige Applikation sein, aber im Gesamtkonzept eines Programms nur ein Teil sein. z.B. Eine Möglichkeit für SEO-Plugins - das kann selbstständig laufen, wird aber in dem Kontext nur als Plugin eingebaut oder aktiviert, wenn man es haben möchte.
Zitat:
Zitat von onemorenerd
Man kann zwar relativ einfach sicherstellen, dass ein Plugin nur die eigenen Tabellen benutzt, ich halte das allerdings für keine gute Idee. Stell dir mal vor du speicherst User/Accounts in einer User-Tabelle. Ein Plugin soll nun das Benutzerprofil erweitern. Dann wird es sicherlich Joins mit der User-Tabelle machen müssen. Wenn du das verbietest, muss das Plugin sich die User über eine PHP-Funktion (der Basisapplikation oder eines anderen Plugins) holen. Ohne Join wird das schnell zum Performanceproblem.
Außerdem hat die Basisapplikation oder ein anderes Plugin z.B. eine Funktion zum Löschen eines Benutzers. Wie willst du sicherstellen, dass diese Funktion nicht von einem "unbefugten" Plugin aufgerufen wird?
|
Tja das sind eben die Fragen, die ich hier diskutieren möchte. Ich will ja jetzt nicht morgen ein perfektes universelles Pluginframework anbieten, aber damit beschäftigen und vielleicht gute Lösungsansätze herausfinden, die ich dann für Projekte nutzen kann. Aber ich habe mir auch andere Pluginsysteme angeschaut (z.B. WCF) und da läuft es meistens auch nur über "Shared"-Klassen, in denen Plugins Schnittstellen anbieten könne, damit sie von anderen Plugins genutzt werden können, eben z.B. um auf grundlegende Userfunktionen zugreifen zu können.
Geändert von ApoY2k (16-07-2010 um 10:19 Uhr)
|

16-07-2010, 10:20
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Du hast zwei Möglichkeiten:
1. API - das Framework stellt nur eine Art Schnittstelle für Plugins bereit,
2. Sandbox - das Framework führt Plugins in einem abgeschotteten Kontext aus.
Die erste Variante verzichtet auf jegliche Schutzmechanismen zur Laufzeit. Dennoch kannst du gewünschtes Verhalten sicher stellen, indem du bspw. nur geprüfte Plugins zuläßt ( Prüfung = Code Review).
Die zweite Variante ist mit PHP nur schwer machbar (runkit Extension), komplex und wahrscheinlich weniger flexibel/mächtig.
|

16-07-2010, 10:25
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Im Grunde wollte ich ebenfalls in Richtung des ersten gehen. Einfach um daran was zu lernen - Produktiv wirds wohl eh nie eingesetzt.
Ich nehme an du meinst mit Prüfung der Plugins, dass ich einfach den Code durchgehe und nachschaue, was es macht und dann sage "okay, genehmigt"? Ich denke das wäre fürs erste die beste Idee, wie gesagt: ich will vorallem was dran lernen.
Ist eigentlich eine schöne Idee, es gibt ja auch genügend Möglichkeiten auf die Integrität der Plugins zu testen über Hashes oder Keys... Eine Frage bleibt aber noch für die Package-geschichte. Eignet sich dafür dieses PHP Archive? Ist auch jeden Fall interessant zu lesen, bloß verstehe ich noch nicht so ganz, wie man diese Archive dann erstellt?
Mal angenommen ich bastle ein neues Plugin und will dann die ganzen Daten dafür packen, muss das dann über ein PHP-Skript laufen? Ich meine... es gibt ja kein Programm, das "PHAR" packen kann oder ?!
Geändert von ApoY2k (16-07-2010 um 10:28 Uhr)
|

16-07-2010, 11:18
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von ApoY2k
Mal angenommen ich bastle ein neues Plugin und will dann die ganzen Daten dafür packen, muss das dann über ein PHP-Skript laufen?
|
Ja.
Zitat:
Zitat von ApoY2k
Ich meine... es gibt ja kein Programm, das "PHAR" packen kann oder ?!
|
Versuch mal "phar" auf der Kommandozeile … im Endeffekt auch nur ein PHP-Skript, deshalb oben das Ja.
|

16-07-2010, 11:51
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Hm okay, dafür könnte man natürlich einen Dienst anbieten. Müsste doch theoretisch möglich sein, dass man sagt "Diesen Ordner packen" und dann per PHP alle Dateien dieses Ordners in ein PHAR packt. sozusagen als Entwickler-Skript.
|

17-07-2010, 21:52
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von ApoY2k
... Eignet sich dafür dieses PHP Archive? Ist auch jeden Fall interessant zu lesen, bloß verstehe ich noch nicht so ganz, wie man diese Archive dann erstellt?
Mal angenommen ich bastle ein neues Plugin und will dann die ganzen Daten dafür packen, muss das dann über ein PHP-Skript laufen? Ich meine... es gibt ja kein Programm, das "PHAR" packen kann oder ?!
|
Man kann PHAR-Dateien auch als gewöhnliche ZIP- oder TAR-Archive[1] erstellen, in denen sich eine spezielle Datei, ein so genanntes Manifest und noch ein wenig zusätzliches Brimborium befindet. Wenn du mich fragst: gequirlter Mist, aber das ist man von den PHP-Machern ja mittlerweile gewohnt.  Wieder ein Batzen aufgeblähter Klassen mehr, mit denen wir rumspielen dürfen.
--
[1] Um die zu erstellen gibts unzählige Kommandozeilentools und auch welche mit GUI und wenn ich mich nicht irre auch diverse PHP-Klassen, mit denen man die passenden Archive selbst bauen (und packen) kann.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (17-07-2010 um 22:33 Uhr)
Grund: Typos
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|