Thread View: de.comp.lang.javascript
5 messages
5 total messages
Started by Sigbert Helle
Wed, 06 Feb 2019 17:26
Schmarotzer
Author: Sigbert Helle
Date: Wed, 06 Feb 2019 17:26
Date: Wed, 06 Feb 2019 17:26
40 lines
1562 bytes
1562 bytes
Hallo liebe Helferlein, ich hab in der Vergangenheit etwa alle 10 Jahre mal Javascript angefasst - bin also ein blutiger Anfänger. "Meine Welt" waren html und php, aber jetzt komm ich wohl um Javascript nicht drum herum: Auf einem Server liegen jpg und pdf-Dateien (Zeitungsartikel), die in einer MySQL-Datenbank katalogisiert sind. Dort liegen aber nur die copyright-freien Artikel. Die anderen Artikel haben ein paar "berechtigte" Leute zu Hause auf ihrer Festplatte. Mit Hilfe eines php-Scriptes lasse ich zu dem jeweiligen Datenbank-Eintrag auch einen Link zu den entsprechenden Dateien erstellen. Damit der normale User nicht durch kryptische zusätzliche Links, die für ihn ins Leere führen, verwirrt wird, stelle ich mir folgendes vor: Genau so wie das php-Script die Existenz der jeweiligen Datei abfragt, bevor der zugehörige Link erstellt wird, wünsche ich mir etwas entsprechendes mit den lokalen Dateien - und da braucht's ja wohl Javascript, das ich in mein php-Skript einbauen muss, oder? Dem php-Skript wird die Variable $TextID übergeben. Die zugehörigen Dateien haben leider mehrere Namen: C-$TextID.jpg oder C-$TextID-1.jpg, ...-2.jpg ... oder auch ...01.jpg, ...02.jpg ... außerdem C-$TextID.pdf C-$TextID-D.pdf C-$TextID-F.pdf (Hat sich so im Lauf der Entwicklung des (nicht kommerziellen !!!) Projekts ergeben) Die Dateien liegen alle im Ordner e:/xyz/C/ Gibt's jemanden da draußen, der mich "liebevoll" an die Hand nimmt? Vielen Dank schon mal! Ach ja, die Links sollen ganz am Ende der html-Seite erscheinen. Sigbert Helle
Lokale Dateien erkennen und verlinken (was: Schmarotzer)
Author: Thomas 'PointedE
Date: Wed, 06 Feb 2019 21:54
Date: Wed, 06 Feb 2019 21:54
159 lines
7665 bytes
7665 bytes
Zunächst möchte ich anmerken, dass die von Dir gewählte Betreffzeile wenig vertrauenerweckend ist. Der stark negativ Belegte Begriff „Schmarotzer“ ist wohl kaum eine geeignete *Beschreibung* des *Inhalts* Deines Artikels und der Diskussion; daher von mir hier ein Versuch, zu einem aussagekräftigeren Betreff zu kommen. Siehe auch <http://einkllich.net/usenet/usenet1> ff. Sigbert Helle wrote: > "Meine Welt" waren html und php, aber jetzt komm ich wohl um Javascript > nicht drum herum: Es gibt kein „html“, „php“ oder „Javascript“. Es gibt die Auszeichnungssprache HTML (HyperText Markup Language), die Programmiersprache PHP (PHP Hypertext Preprocessor), und es gibt JavaScript. Wobei Letzteres keine einzelne Programmiersprache ist, sondern heutzutage besser als Sammelbegriff für alle Programmiersprachen verstanden werden sollte, deren Name berechtigterweise „JavaScript“ enthält (also Netscape JavaScript, Mozilla JavaScript und Google V8 JavaScript), und eben _nicht_ aller ECMAScript-Implementierungen (also zum Beispiel _nicht_ Microsoft JScript und JScript .NET und Opera ECMAScript), weil diese sich voneinander in oft unbekanntem Ausmass voneinander unterscheiden. Siehe auch <http://PointedEars.de/es-matrix> > Auf einem Server liegen jpg und pdf-Dateien (Zeitungsartikel), die in > einer MySQL-Datenbank katalogisiert sind. Was ist mit „ein Server“ gemeint (ich weiss, was ein Server ist)? In welchem Netzwerk befindet er sich? > Dort liegen aber nur die copyright-freien Artikel. Die anderen Artikel > haben ein paar "berechtigte" Leute zu Hause auf ihrer Festplatte. > Mit Hilfe eines php-Scriptes lasse ich zu dem jeweiligen > Datenbank-Eintrag auch einen Link zu den entsprechenden Dateien erstellen. > Damit der normale User nicht durch kryptische zusätzliche Links, die für > ihn ins Leere führen, verwirrt wird, stelle ich mir folgendes vor: > Genau so wie das php-Script die Existenz der jeweiligen Datei abfragt, > bevor der zugehörige Link erstellt wird, wünsche ich mir etwas > entsprechendes mit den lokalen Dateien - und da braucht's ja wohl > Javascript, das ich in mein php-Skript einbauen muss, oder? Wenn die Links dynamisch generiert werden sollen, also als Abbild der *lokalen* Realität, dann benötigst Du dafür in einer Client-Server-Architektur wie dem (World Wide) Web ein *clientseitiges* Computerprogramm. Die Frage der verwendeten Programmiersprache (auch ob Scriptsprache oder nicht) ist dabei *sekundär* (die Aussagen „PHP ist serverseitig“ und „JavaScript ist clientseitig“ sind falsch), muss aber bei *aktuellen* Webbrowsern korrekt mit „eine ECMAScript-Implementierung“ beantwortet werden, also ein Programm (i.d.F. „Script“ genannt) so geschrieben, das kompatibel zu diesen ist. (Visual Basic Script [VBScript] starb /de facto/ zusammen mit Internet Explorer vor ca. 2 Jahren.) > Dem php-Skript wird die Variable $TextID übergeben. Das denke ich nicht. Vielmehr *definiert* wahrscheinlich das PHP-Script eine Variable namens „TextID“ (*referenziert mit „$TextID“). > Die zugehörigen Dateien haben leider mehrere Namen: > > C-$TextID.jpg > oder > C-$TextID-1.jpg, ...-2.jpg ... oder auch ...01.jpg, ...02.jpg ... > außerdem > C-$TextID.pdf > C-$TextID-D.pdf > C-$TextID-F.pdf > (Hat sich so im Lauf der Entwicklung des (nicht kommerziellen !!!) > Projekts ergeben) > Die Dateien liegen alle im Ordner e:/xyz/C/ Bei *Dir* liegen sie vermutlich unter E:\xyz\C\ (*Windows* verwendet *Back*slashes als Pfadtrenner, nicht Schrägstriche). Du weisst aber *nicht*, wo der berechtigte Benutzer Deine Dateien gespeichert hat. > Gibt's jemanden da draußen, der mich "liebevoll" an die Hand nimmt? > > Ach ja, die Links sollen ganz am Ende der html-Seite erscheinen. [Es gibt keine html-Seiten. Mit HTML werden Web-_Dokumente_ erzeugt; die Sammlung aller Web-Dokumente (in HTML, SVG, MathML usw.) ergibt eine _Website_, die konzeptionell seitenweise dargestellt werden kann, aber nicht muss.] Ich habe Dich so verstanden, dass es bestimmte Dateien gibt, die sich nur auf dem lokalen Computer des Benutzers befinden, nicht auf Deinem Server. Du möchtest nun auf Deiner öffentlichen Website Links auf das lokale Dateisystem anzeigen lassen, aber nur, wenn die betreffenden Dateien dort existieren. Aus Sicherheitsgründen ist es nicht einfach möglich, von einer öffentlichen Website aus das lokale Dateisystem abzufragen. Früher war es in Firefox möglich, dass ein clientseitiges Script zusätzliche Privilegien vom Benutzer anfordern konnte (netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")), und dann konnte man dies mit einem HTTP-Request tun, weil Firefox beim HTTP-Request eines lokalen Verzeichnisses ein Verzeichnislisting im HTML-Format generierte. Somit war es möglich, das HTML-Dokument zu parsen und herauszufinden, welche Dateien sich in diesem Verzeichnis befinden. Dieses Feature wurde aber vor geraumer Zeit entfernt und ist heute maximal noch über eine Benutzereinstellung (Preference) verfügbar – in meinem Firefox 52 unter GNU/Linux hat “netscape.security” jedenfalls mit Standardeinstellungen keine Eigenschaften. Ich habe das jetzt aber nicht weiter überprüft, denn: Angenommen, Du findest eine Möglichkeit, das lokale Dateisystem gezielt auszulesen bzw. Du findest Benutzer, die Dir genügend vertrauen, dass sie ihren Browser so einstellen, dass es geht. Dann weisst Du aber immer noch nicht, ob die Datei sich auf dem Computer des Benutzers befindet, wenn sie sich nicht in diesem Pfad befindet, oder ob sie sich nur nicht *in diesem Pfad* befindet. Du müsstest also Deine Benutzer *anweisen*, ihr lokales Dateisystem gemäss *Deinen* Vorgaben zu gestalten, nur damit sie dann die von Dir einst bereitgestellten Dateien durch Klick auf Deiner Website öffnen können. Angenommen, die Datei würde lokal unter Micro$~1 Windoze in einem FAT- oder NTFS-Dateisystem als E:\xyz\C\blubb.pdf gespeichert sein, dann wäre der entsprechende URI “file:///C:/xyz/C/blubb.pdf” (*URIs* verwenden Schrägstriche als Pfadtrenner, nicht Backslashes; ein Windows-System mappt dies auf die Windows-Pfade, ein unixoides System übernimmt es einfach). Da stellt sich neben der Frage der Benutzerfreundlichkeit und Effizienz auch die Frage der Machbarkeit: Dateipfade sind betriebssystemabhängig, entsprechend auch URIs lokaler Dateien. Was ist zum Beispiel, wenn Dein Benutzer sich entscheidet, GNU/Linux zu verwenden (so wie ich)? Dann müsste er extra für jede Datei *als Benutzer “root”* einen symbolischen Link anlegen, z. B. sudo mkdir -p '/C:/xyz/C' sudo ln -s /wahrer/pfad '/C:/xyz/C/blubb.pdf' nur damit Dein Link auf Deiner Website, der für Windoof-Benutzer gemacht ist, funktioniert (ja, *so* geht es tatsächlich; hab’s getestet). Oder Du müsstest für alle möglichen Betriebssysteme Links auf der Website anbieten, für jede Datei, die nur lokal vorliegen darf. Denn Du kannst *unmöglich* bei Besuch der Website das gesamte lokale Dateisystem des Benutzers nach Dateien durchsuchen. Selbst wenn Dir dabei Berechtigungen des lokalen Dateisystems keinen Strich durch die Rechnung machen würden (Web-Browser werden nicht nicht mit dem Administrator/root-Account ausgeführt bzw. sollten es aus Sicherheitsgründen nicht), so wäre das immer noch hochgradig ineffizient (ein Dateisystem enthält typischerweise *Millionen* Dateien, und es gibt keinen *universellen* Katalog, der zu einem Dateinamen alle passenden Dateipfade enthält). Dein Ansatz erscheint mir daher suboptimal. HTH. -- PointedEars (ZCE PHP) <https://github.com/PointedEars> | <http://PointedEars.de/wsvn/> Twitter: @PointedEars2 Please do not cc me. / Bitte keine Kopien per E-Mail.
Re: Lokale Dateien erkennen und verlinken (was: Schmarotzer)
Author: Sigbert Helle
Date: Wed, 06 Feb 2019 23:00
Date: Wed, 06 Feb 2019 23:00
43 lines
1933 bytes
1933 bytes
Hallo PointedEars, vielen Dank für dein umfassende Antwort - da hab ich wohl ein paar wichtige Informationen vergessen: Am 06.02.2019 um 21:54 schrieb Thomas 'PointedEars' Lahn: > Was ist mit „ein Server“ gemeint (ich weiss, was ein Server ist)? > In welchem Netzwerk befindet er sich? Internet > Bei *Dir* liegen sie vermutlich unter E:\xyz\C\ (*Windows* verwendet > *Back*slashes als Pfadtrenner, nicht Schrägstriche). Du weisst aber > *nicht*, wo der berechtigte Benutzer Deine Dateien gespeichert hat. Doch. Das ganze ist ein kleiner Kreis von Nutzern, die tatsächlich alle meine Pfad-Vorgaben benutzen. Alle benutzen Windows (ich selbst Windows und Linux). > Früher war es in Firefox möglich, dass ein clientseitiges Script zusätzliche > Privilegien vom Benutzer anfordern konnte > (netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")), > und dann konnte man dies mit einem HTTP-Request tun, weil Firefox beim > HTTP-Request eines lokalen Verzeichnisses ein Verzeichnislisting im > HTML-Format generierte. Somit war es möglich, das HTML-Dokument zu parsen > und herauszufinden, welche Dateien sich in diesem Verzeichnis befinden. > Dieses Feature wurde aber vor geraumer Zeit entfernt und ist heute maximal > noch über eine Benutzereinstellung (Preference) verfügbar – in meinem > Firefox 52 unter GNU/Linux hat “netscape.security” jedenfalls mit > Standardeinstellungen keine Eigenschaften. Den aktuellen Firefox (65) kann man ja per Eintrag in die user.js veranlassen Links in Webseiten, die auf lokale Dateien zeigen, auszuführen. user_pref("capability.policy.policynames", "LocalFileLinks"); user_pref("capability.policy.LocalFileLinks.sites", "https://www.xyz.de/abc.php"); user_pref("capability.policy.LocalFileLinks.checkloaduri.enabled", "allAccess"); Ich hatte gehofft, dass dieser oder ein ähnlicher Eintrag auch meine gewünschten Skript-Aktionen ermöglichen würde. Gruß Sigbert Helle
Re: Schmarotzer
Author: Maik Koenig
Date: Thu, 07 Feb 2019 00:43
Date: Thu, 07 Feb 2019 00:43
37 lines
1868 bytes
1868 bytes
Am 06.02.2019 um 17:26 schrieb Sigbert Helle: > Auf einem Server liegen jpg und pdf-Dateien (Zeitungsartikel), die in > einer MySQL-Datenbank katalogisiert sind. > Dort liegen aber nur die copyright-freien Artikel. Die anderen Artikel > haben ein paar "berechtigte" Leute zu Hause auf ihrer Festplatte. > Mit Hilfe eines php-Scriptes lasse ich zu dem jeweiligen > Datenbank-Eintrag auch einen Link zu den entsprechenden Dateien erstellen. > Damit der normale User nicht durch kryptische zusätzliche Links, die für > ihn ins Leere führen, verwirrt wird, stelle ich mir folgendes vor: > Genau so wie das php-Script die Existenz der jeweiligen Datei abfragt, > bevor der zugehörige Link erstellt wird, wünsche ich mir etwas > entsprechendes mit den lokalen Dateien - und da braucht's ja wohl > Javascript, das ich in mein php-Skript einbauen muss, oder? Ohne ein (risiges) Loch in die Sicherheitsmechanismen der Browser zu bohren geht das nicht, denn mit normaler (meint: der typischen bei der Installation vorhandenen) Konfiguration und ohne Zusatzsoftware lässt ein heutiger Browser keinen Zugriff auf das lokale Dateisystem zu. Wowereit einself. Aber eine mögliche Lösung wäre z.B. ein Loginsystem: Nur wer angemeldet ist, bekommt die zusätzlichen Links zu sehen. Oder stark vereinfacht: Nur wer im entsprechenden Feld das richtige Passwort eingibt bekommt die Links zu sehen. Oder nochmals vereinfacht a la Text: "Wenn Du zu unserem Verein gehörst, klicke bitte hier, um auch deine lokalen Dateien als Link zu sehen"... Die Frage ist einfach, wie schlecht es wäre, wenn "Nichtmitglieder" die Links halt doch sehen. Gehts nur um Optik, sollte der schlicht Textlink wohl genügen. Greetz, MK -- Kopp-Verlag-Gläubige, Religionsdeppen, rechte Vollidioten und ähnlicher Bio-Abfall werden ohne Hinweis ignoriert! https://das-ist-afd.de/
Re: Schmarotzer
Author: Arno Welzel
Date: Thu, 07 Feb 2019 20:52
Date: Thu, 07 Feb 2019 20:52
23 lines
912 bytes
912 bytes
Sigbert Helle: [...] > Genau so wie das php-Script die Existenz der jeweiligen Datei abfragt, > bevor der zugehörige Link erstellt wird, wünsche ich mir etwas > entsprechendes mit den lokalen Dateien - und da braucht's ja wohl > Javascript, das ich in mein php-Skript einbauen muss, oder? Das geht nicht. Man kann mit einem JavaScript, dass von einem Server kommt, nicht auf lokale Dateien zugreifen - und das ist auch gut so! JavaScript kann auch Daten an den Server schicken, vom dem aus es aufgerufen wurde. Stelle Dir einfach vor, was das bedeuten würde, wenn Script, die in einer Website eingebunden sind, auf Dateien auf deinem Computer zugreifen könnte. Die eigentliche Lösung ist, dass Nutzer sich beim Server anmelden müssen und man anhand der Nutzerkennung unterscheidet, ob der Nutzer berechtigt ist, auf bestimmte Inhalte zuzugreifen oder eben nicht. -- Arno Welzel https://arnowelzel.de
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads