Veröffentlichungsdatum: 07. Februar 2017
Änderungsdatum: 16. März 2021
Dieser Artikel beschreibt, wie Sie Binärdokumente, die mit Ansichtsrechten versehen sind, vor einem Direktaufruf schützen.
Mit Hilfe der PHP-Framework Funktion PHP-Framework Funktion - wRepository::checkPermissionViewDocument können Sie PHP-Dateien auf einfache Weise personalisieren. Es genügt, die Berechtigungsprüfung im Kopfbereich einer Datei durchzuführen, um die Anzeige gegebenenfalls zu verhindern. Dies ist in den Beispielprojekten bereits standardmässig so umgesetzt.
Falls Sie andere Dokumententypen wie z.B. Bilder (JPG, PNG, etc.), ZIP oder PDF-Dateien personalisieren wollen, können Sie den Direktaufruf solcher Binärdateien über eine .htaccess Datei umleiten.
Ein Apache Webserver stellt Ihnen hierzu das Apache Modul mod_rewrite bereit (siehe auch weiterführende Artikel). Dieses Modul ist auf den Apache Installationen der meisten Provider bereits enthalten und ermöglicht es, aufgerufene Links vor deren Ausführung beliebig umzuwandeln. Erfragen Sie dies sicherheitshalber über Ihren Provider!
Der direkte Aufruf von Binär-Dokumenten kann so z.B. über eine PHP-Datei umgelenkt werden, über die die Ansichtsrechte geprüft werden.
Weblication® CMS stellt hierzu softwareseitig die accessDocument.php zur Verfügung, welche über die entsprechende PHP-Framework Funktion die Ansichtsrechte eines Binärdokumentes prüfen kann. Die jeweilige Binärdatei muss eingecheckt sein und in den Datei-Eigenschaften (Personalisierung) entsprechende Ansichtsbenutzer bzw. -gruppen hinterlegt haben. Dies kann auch verzeichnisübergreifend über die Standard-Dateieinstellungen für nicht eingecheckte Dateien vorgenommen werden (siehe weiterführende Links).
Das nachfolgende Beispiel einer .htaccess Datei führt dies beispielhaft im Verzeichnis /projekt-de/kundenbereich/ an und prüft Dateien mit der Endung .pdf, .doc, .png, .jpg, .jpeg und .gif.
Die Regeln können um beliebige Dateiendungen erweitert werden, NC steht
dabei für nicht case sensitive (siehe hierzu auch weiterführende Links). Beachten Sie auch, dass die Regeln auf
Unterverzeichnisse vererbt werden. Passen Sie die Pfade an Ihre Projektpfade an!
RewriteEngine on RewriteCond %{REQUEST_URI} \.(jpeg|jpg|webp|gif|png|svg)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) /weblication/grid5/scripts/wImage.php?action=showImageSizeNotYetAvailable [L] RewriteCond %{REQUEST_URI} \.pdf$ [NC,OR] RewriteCond %{REQUEST_URI} \.doc$ [NC,OR] RewriteCond %{REQUEST_URI} \.png$ [NC,OR] RewriteCond %{REQUEST_URI} \.jpg$ [NC,OR] RewriteCond %{REQUEST_URI} \.jpeg$ [NC,OR] RewriteCond %{REQUEST_URI} \.webp$ [NC,OR] RewriteCond %{REQUEST_URI} \.gif$ [NC] #forceDownload aktivieren, um Dateien beim Aufruf zum Speichern anzubieten: RewriteRule (.*) /[IHR-GLOBALES-PROJEKT]/wGlobal/scripts/accessDocument.php?document=/[IHR-ASSETS-PROJEKT]/kundenbereich/$1&display=1&forceDownload=0&%{QUERY_STRING} [L]
Das aktuelle BASE Basisprojekt hat standardmässig keine Umschreibung bestimmter Binärdateien für das Assets-Verzeichnis gesetzt (Performancegründe). Die Dokumente innerhalb Ihres Assets-Verzeichnisses werden erst dann auf Berechtigung geprüft, wenn Sie dies explizit setzen. Nachfolgend ein Beispiel der Standardauslieferung der .htaccess für das Assets-Verzeichnis. Hiermit werden Dateien mit der angegebenen Dateiendung von der Umleitung auf die accessDocument.php ausgeschlossen. Standardmässig werden somit z.B. PDF- oder DOC-Dateien über das PHP-Skript geleitet, da diese Dateiendungen nicht über die .htaccess Datei ausgeschlossen werden.
Passen Sie die Pfade an Ihre Projektpfade an!
<IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 30 minutes" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/webp "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" </IfModule> <IfModule mod_deflate.c> <FilesMatch "\.svg$"> SetOutputFilter DEFLATE </FilesMatch> </IfModule> Header set X-Content-Type-Options "nosniff" Options -Indexes AddType video/mp4 .mp4 AddType video/mp4 .m4v AddType audio/mpeg .mp3 AddType image/webp .webp RewriteEngine on RewriteCond %{REQUEST_URI} \.(jpeg|jpg|webp|gif|png|svg)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) /weblication/grid5/scripts/wImage.php?action=showImageSizeNotYetAvailable [L] RewriteCond %{REQUEST_URI} \.\w+$ [NC] RewriteCond %{REQUEST_URI} !\.gif$ [NC] RewriteCond %{REQUEST_URI} !\.jpg$ [NC] RewriteCond %{REQUEST_URI} !\.jpeg$ [NC] RewriteCond %{REQUEST_URI} !\.webp$ [NC] RewriteCond %{REQUEST_URI} !\.png$ [NC] RewriteCond %{REQUEST_URI} !\.svg$ [NC] RewriteCond %{REQUEST_URI} !\.swf$ [NC] RewriteCond %{REQUEST_URI} !\.flv$ [NC] RewriteCond %{REQUEST_URI} !\.avi$ [NC] RewriteCond %{REQUEST_URI} !\.mov$ [NC] RewriteCond %{REQUEST_URI} !\.wmv$ [NC] RewriteCond %{REQUEST_URI} !\.mpg$ [NC] RewriteCond %{REQUEST_URI} !\.mpeg$ [NC] RewriteCond %{REQUEST_URI} !\.mp4$ [NC] RewriteCond %{REQUEST_URI} !\.m4v$ [NC] RewriteCond %{REQUEST_URI} !\.mp3$ [NC] RewriteCond %{REQUEST_URI} !\.ogv$ [NC] RewriteCond %{REQUEST_URI} !\.ogg$ [NC] RewriteCond %{REQUEST_URI} !\.php$ [NC] RewriteCond %{REQUEST_URI} !\.html$ [NC] #forceDownload aktivieren, um Dateien beim Aufruf zum Speichern anzubieten: RewriteRule (.*) /[IHR-GLOBALES-PROJEKT]/wGlobal/scripts/accessDocument.php?document=/[IHR-ASSETS-PROJEKT]/$1&display=1&forceDownload=0&%{QUERY_STRING} [L]
Liegt im Verzeichnis einer Binär-Datei (z.B. jpg Bild) keine solche .htaccess Datei ab, wird über die Datei-Eigenschaften (Personalisierung) einer dort enthaltenen Daten ein Warnhinweis ausgegeben:
"Die Personalisierung dieses Dokumentes wird vom Webserver derzeit nicht unterstützt!"
Ab CMS-Version 015.006.014.000 wird in solchen Fällen auch in den Standard-Dateieinstellungen (Eigenschaften - Personalisierung) ein Warnhinweis ausgegeben:
"Die Personalisierung ist nur dann sichergestellt, wenn in die
entsprechenden Dateitypen in der .htaccess berücksichtigt werden. Bitte
prüfen Sie das!"