Befehle des Menübands überspringen
Zum Hauptinhalt wechseln
SF Software-Beratung

Wer mit den Microsoft SharePoint Services 3.0 oder dem Microsoft Office SharePoint Server 2007 eine öffentliche Website betreibt, kennt das Problem vielleicht: Die Seiten möchten per JavaScript gerne eine zu Microsoft Office gehörende ActiveX-Komponente instanziieren, die name.dll. Das ist im Intranet höchst nützlich und für manche Funktionen auch notwendig. Auf einer öffentlichen Seite, auf die anonym zugegriffen wird, ist es aber nicht nur nutzlos, sondern ärgerlich: Spätestens seit Internet Explorer 7 erscheint nämlich eine lästige Warnung.

Es gibt einen Microsoft Knowledge Base-Artikel 931509, der beschreibt, wie man dem abhelfen kann. Das ist nur leider die Radikallösung - die name.dll wird danach überhaupt nicht mehr geladen, auch nicht im Intranet. Da das die Funktionalität z. B. der Seitenpflege einschränkt, haben wir das etwas weiter geführt. Wenn Sie möchten, können Sie die folgende Anleitung nach sorgfältiger Prüfung und Anpassung an Ihre eigene Umgebung auf eigene Gefahr ausprobieren:

  1. Machen Sie die Website intern unter einem NetBIOS-Namen erreichbar (also unter einem Namen ohne Punkte), hier z. B. netbiosname. Dafür können Sie z. B. einen DNS-Alias in Ihre internen DNS-Server eintragen, der auf den Webserver zeigt.
  2. Lassen Sie die SharePoint-Website nur mit Authentifizierung, nicht anonym, ansprechen. Damit werden interne Clients gezwungen, sich per Windows-integrierter Anmeldung bei IIS zu melden. Die Benutzer brauchen keine separate Anmeldung einzugeben, wenn Sie http://netbiosname aufrufen. Definieren Sie für die authentifizierende Website ausdrücklich den Hostheader netbiosname.
  3. Lassen Sie dieselbe Website mit standardmäßigen SharePoint-Mitteln unter einer zweiten IIS-Website erreichen. Auf der lassen Sie ausschließlich anonyme Anmeldung zu. Geben Sie dieser Website den Hostheader der öffentlichen Adresse, z. B. www.dnsname.com.
  4. Stellen Sie per Eintrag im öffentlichen DNS und per Firewallkonfiguration sicher, dass die öffentliche Adresse auch tatsächlich vom Internet aus erreichbar ist. Konfigurieren Sie Ihre Firewall ggf. so, dass der Original-Hostheader (also der öffentliche Name) an den SharePoint-Server weitergegeben wird, damit IIS anhand des Hostheaders die Website ohne Authentifizierung zuordnen kann. Konfigurieren Sie (z. B. im Microsoft ISA Server 2004 oder höher) die Linkübersetzung so, dass die Links der SharePoint-Seiten korrekt in die öffentlichen Namen übersetzt werden.
  5. Wenn das alles gegeben ist, kommt der eigentliche Trick: Wie bringen wir SharePoint bei, das ActiveX-Control genau dann zu laden, wenn jemand im internen Netzwerk http://netbiosname anwählt, ohne dass es beim Aufruf aus dem Internet via http://www.dnsname.com geladen wird? Dazu editieren Sie die init.js (siehe obengenannten Microsoft-Artikel). Führen Sie aber nicht die im KB-Artikel vorgeschlagenen Änderungen durch, sondern folgende (nachdem Sie selbstverständlich eine Sicherheitskopie der init.js angefertigt haben):

Suchen Sie die folgende Funktion:

function EnsureIMNControl()

Wenige Zeilen dahinter finden Sie folgende Zeile:

if (browseris.ie5up && browseris.win32)

Ersetzen Sie diese durch folgenden Code:

if (browseris.ie5up && browseris.win32
&& (document.URL.indexOf(".") < 0
|| document.URL.indexOf(".") > document.URL.indexOf("/", document.URL.indexOf("://") + 3)))

JavaScript hält es für eine gute Idee, zwischen Groß- und Kleinschreibung zu unterscheiden. Sie müssen die Schreibweise also genau einhalten, damit das Script funktioniert.

Mit dieser Bedingung wird das Script (welches im Browser der Websitebesucher laufen wird) das ActiveX-Control nur noch dann ansprechen, wenn in der URL, mit der die Seite aufgerufen wurde, entweder gar kein Punkt vorkam, oder wenn der erste Punkt erst nach dem ersten Schrägstrich nach der Zeichenfolge :// vorkommt. Beim Aufruf von http://netbiosname/Seiten/Default.aspx kommt zwar ein Punkt vor, aber erst nach dem dritten Schrägstrich. Das ActiveX-Control wird also geladen - wir sind im Intranet. Beim Aufruf von http://www.dnsname.com/Seiten/Default.aspx kommen Punkte aber schon vor dem dritten Schrägstrich vor. Wir sind im Internet, anonym angemeldet, und das ActiveX-Control wird nicht geladen.

Voilà.