So prüfen Sie die Personalisierung bei Binärdateien

21. Okt 2010

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!

Beispiel: Auszug aus einer .htaccess innerhalb /Ihr-Assets-Projekt/kundenbereich

RewriteEngine on
                                      
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} .gif$ [NC]

#forceDownload aktivieren, um Dateien beim Aufruf zum Speichern anzubieten:
RewriteRule (.*) /Ihr-Global-Projekt/wGlobal/scripts/accessDocument.php?wAuthIdHtaccess=424829720&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!

Beispiel: Auszug aus einer .htaccess innerhalb /Ihr-Assets-Projekt

<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/png  "access plus 1 month"
  ExpiresByType video/mp4  "access plus 1 month"
  ExpiresByType video/ogg  "access plus 1 month"  
</IfModule>  

AddType video/mp4 .mp4
AddType video/mp4 .m4v

RewriteEngine on

RewriteCond %{REQUEST_URI} \.\w+$ [NC]
RewriteCond %{REQUEST_URI} !\.gif$ [NC]
RewriteCond %{REQUEST_URI} !\.jpg$ [NC]
RewriteCond %{REQUEST_URI} !\.jpeg$ [NC]
RewriteCond %{REQUEST_URI} !\.png$ [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-Global-Projekt/wGlobal/scripts/accessDocument.php?wAuthIdHtaccess=424829720&document=/Ihr-Assets-Projekt/$1&display=1&forceDownload=0&%{QUERY_STRING} [L]

Entwicklerbereich Weblication® CMS - © Scholl Communications AG