HTML-Tags wie style oder iframe im HCL Connections Editor erlauben (ACF)

HTML-Tags wie style oder iframe im HCL Connections Editor erlauben (ACF)

Wer bestimmte HTML-Tags wie z.B. iframe im Connections Editor nutzt, wird feststellen: Nach dem Speichern sind diese verschwunden. Dies liegt am Active Content Filter, kurz ACF. Historisch gab es hier sowohl Whitelist- als auch Blacklist-Ansätze. Dementsprechend sollen ungefährliche Tags erlaubt bzw. gefährliche gefiltert werden. Vor einiger Zeit wurde auf Blacklisting umgestellt. Aktuell legt die ACF also fest, welche Tags blockiert werden.

Erlauben oder nicht erlauben?

Standardmäßig sind darunter auch vereinzelte Tags, die man möglicherweise aktivieren möchte. Darunter beispielsweise die Einbettung von iFrames oder style-Blöcken. Es ist diskutabel, ob man solche Tags zulässt. Es gibt sowohl Vor- als auch Nachteile. Ein style-Tag erlaubt es, Editor-Beiträge mit eigenen CSS Klassen/IDs aufzuhübschen. Wer komplexere Styleanpassungen an z.B. Wiki-Seiten vornimmt, wird sich über diese Möglichkeiten freuen. So muss nicht alles unübersichtlich und schlecht wartbar in das style-Attribute der Tags kopiert werden.

Allerdings spricht auch manches dagegen. Vor allem sicherheits- und datenschutztechnisch: Via iFrame können Drittanbieter-Inhalte unkontrolliert nachgeladen werden. Auch vermeintlich harmloses CSS kann fremde Quellen einbinden, beispielsweise für Schriftarten. Mit etwas Fantasie sind sogar Keylogger möglich.

Das Thema möchte ich an dieser Stelle nicht weiter ausführen. Jedoch sollte man sich über die möglichen Risiken im klaren sein und nicht unüberlegt Tags freischalten. Von einer Freischaltung des script-Tags ist grundsätzlich abzuraten! Das Missbrauchspotenzial durch unkontrolliertes JavaScript ist riesig.

Active Content Filter (ACF) des Connections Editor anpassen

LotusConnections-config Ordner auschecken

Der sauberste Weg besteht darin, in einer wsadmin-Shell mithilfe des LCConfigService die XML-Dateien aus- und einzuchecken. Hierzu benötigen wir zunächst einen temporären Ordner, in den ausgecheckt werden kann:

mkdir /tmp/lc-checkout

Nun starten wir eine wsadmin-Shell und melden uns mit einem WebSphere-Administrator an.

cd /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/
./wsadmin.sh -lang jython

Der Checkout wird wie folgt durchgeführt:

execfile("connectionsConfig.py")
LCConfigService.checkOutConfig("/tmp/lc-checkout", AdminControl.getCell()))

In /tmp/lc-checkout/LotusConnections-config.xml können nun Änderungen durchgeführt werden. Es ist zu empfehlen die wsadmin-Shell geöffnet zu lassen, da sich dadurch das Einchecken vereinfacht.

Welche Konfiguration greift für welche Anwendung?

In der LotusConnections-config.xml Konfigurationsdatei gibt es sloc:serviceReference Elemente. Sie Mappen eine Anwendung auf die dazugehörige XML-Konfigurationsdatei mit Filterregeln.

sloc:serviceReference acf_config_file="acp-configkey__default.xml" bootstrapHost="admin_replace" bootstrapPort="admin_replace" clusterName="AppsCluster" enabled="true" person_card_service_name_js_eval="generalrs.label.personcard.wikislink" person_card_service_url_pattern="/home/search?uid={userid}&name={displayName}" serviceName="wikis" ssl_enabled="true"

Hier kann man unter acf_config_file die jeweilige Datei mit den Regeln eintragen. Es gibt verschiedene Vorlagen:

  • acf-config.xml: Erlaubt Styling, Form-Elemente, aber entfernt Flash
  • acf-config-nf.xml: Erlaubt Styling, verhindert Form-Elemente und Flash
  • acf-config-nf-ns.xml: Verhindert Styling, Entfernt Form-Elemente und Flash (restriktiv)

Weitere Dateien finden sich in der Dokumentation. Ich nutze meist acf-config-nf.xml, da dies ein sinnvoller Kompromiss ist und sich die Änderungen in Grenzen halten. Eine Auflistung aller Anwendungen und deren ACF-Dateien findet man in einer Standard LotusConnections-config.xml (ohne eigene Anpassungen) wie folgt:

# grep "acf_config_file=" LotusConnections-config.xml | awk -d'=' '{print $9 "\t\t"  $2;}'
serviceName="activities"		acf_config_file="acp-configkey__default.xml"
serviceName="blogs"		acf_config_file="acp-configkey__default.xml"
serviceName="communities"		acf_config_file="acp-configkey__default.xml"
serviceName="dogear"		acf_config_file="acp-configkey__default.xml"
serviceName="profiles"		acf_config_file="acf-config-nf.xml"
serviceName="wikis"		acf_config_file="acp-configkey__default.xml"
serviceName="forums"		acf_config_file="acp-configkey__default.xml"

ACF-Konfiguration für eine Anwendung ändern

Am Beispiel der Wikis-Anwendung ändere ich daher

sloc:serviceReference acf_config_file="acp-configkey__default.xml" serviceName="wikis"

zu

sloc:serviceReference acf_config_file="acf-config-nf.xml" serviceName="wikis"

Einchecken der Änderung

LCConfigService.checkInConfig()

Danach muss eine vollständige Neusynchronisation in der ISC durchgeführt und die jeweilige Anwendung (hier Wikis) neu gestartet werden.

ACF Vorlagen bearbeiten

Je nachdem was man erlauben möchte, reicht das Ändern der ACF-Datei bereits aus. Bei den Anfangs erwähnten iFrames ist dies nicht der Fall – hier gibt es keine passende Vorlage. Es ist jedoch möglich, die Vorlagen anzupassen. Leider können diese nicht ausgecheckt werden. Daher bleibt keine andere Wahl, als direkt im Konfigurationsordner des Deployment-Managers zu arbeiten. Die XML-Dateien befinden sich im LotusConnections-config/extern Unterverzeichnis:

vim /opt/IBM/WebSphere/AppServer/profiles/Dmgr01/config/cells/CnxCell/LotusConnections-config/extern/acf-config-nf.xml

Darin befinden sich einige Regeln. Diese beziehen sich auf komplette Elemente (wie z.B. iframe), oder aber teils auch bestimmte Attribute. Style-Blöcke und iFrame werden beispielsweise durch folgende Regeln entfernt:

<rule tag='style' action='remove-tag' />
<rule tag='iframe' action='remove-tag'/>

Diese kann man einfach auskommentieren oder entfernen. Anschließend einen Fullsync sowie die jeweiligen Anwendung(en), hier Wikis, neu starten. Danach sind die neuen Filterregeln verfügbar. Entfernt man beispielsweise die iFrame-Regel, können iFrames eingefügt werden.

Wichtige Hinweise

Zu beachten ist, dass neue Regeln nur für Änderungen im Editor gültig sind! Die ACF findet Anwendung beim Speichern. Wenn gestern jemand versucht hat iFrames einzufügen, werden diese durch ein heutiges Entfernen der Regel wie oben beschrieben nicht sichtbar. Alle Änderungen finden somit erst in der Zukunft Anwendung.

Man sollte auch nicht vergessen, Änderungen bei jedem Update zu prüfen und ggf. erneut einzuspielen. Aktuell überschreibt Connections beispielsweise Anpassungen der Filterregeln. Das kann zu unerwünschten Nebeneffekten führen, wenn dies vergessen wird und die Nutzer Inhalte bearbeiten!

Beispiel: IFrames werden erlaubt und genutzt. Ein Connections-Update entfernt die Regel, sodass iFrames wieder verboten sind. Da dies nur für Bearbeitungen gilt, sieht man die iFrames in den alten Artikeln weiterhin. Wird ein solcher alter Artikel jedoch geändert, greift die neue ACF – das iFrame wird somit entfernt. Was geändert wird, spielt keine Rolle. Es reicht aus, wenn jemand auf „Bearbeiten“ und anschließend „Speichern“ drückt.

Leave a Reply