Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Schmarotzer

11 views
Skip to first unread message

Sigbert Helle

unread,
Feb 6, 2019, 11:26:19 AM2/6/19
to
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

Thomas 'PointedEars' Lahn

unread,
Feb 6, 2019, 3:54:58 PM2/6/19
to
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.

Sigbert Helle

unread,
Feb 6, 2019, 5:00:11 PM2/6/19
to
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

Maik Koenig

unread,
Feb 6, 2019, 6:51:46 PM2/6/19
to
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/

Arno Welzel

unread,
Feb 7, 2019, 2:52:31 PM2/7/19
to
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
0 new messages