locked
TMG Publishing Rule - Reporting Services URL mit Umlauten geblockt trotz deaktiviertem High-Bit RRS feed

  • Frage

  • Liebe Leute,

    wir setzen einen Forefront TMG 2010, deutsch, auf deutschem Windows Server 2008 SP2 ein. TMG 2010 ist SP2 Roll-Up 1. Für die betroffene Seite wird ein Web-FBA-SSO-Listener mit Kerberos Constrained Delegation verwendet.

    Ich habe eine Web Publishing Rule von extern auf einen internen Reporting Services Server (SQL 2008) und das funktioniert soweit, außer im Berichtsnamen sind Umlaute enthalten! Aufgetreten ist es jetzt mit einem Bericht der "Personaldaten und Fortbildung für leitende Bedienstete" heißt. Die Hauptseite des Berichts kann man zwar noch aufrufen, wenn man dann aber eine Person aus der Dropdown-Liste wählt und auf "Bericht anzeigen" klickt, dann löst das einen POST-Request aus der folgendermaßen mit einem Fehler quittiert wird:

    Name des Testberichts: TestLeitBed mit ü
    https://<externer-fqdn>/Reports/Pages/Report.aspx?ItemPath=%2fPersonaldaten+und+Fortbildung%2fTestLeitBed+mit+%u00dc&SelectedTabId=ViewTab
    Netzwerkzugriffsmeldung: Die Seite kann nicht angezeigt werden
    Fehlercode: 500 interner Serverfehler. Der Server hat die angegebene URL verweigert. Wenden Sie sich an den Serveradministrator (12202).

    Auf die Sache mit der Normalisierung und den High-Bit-Zeichen bin ich ja recht rasch gekommen, sowas hatten wir in der Vergangenheit mal mit einem Web-CMS-System, nur der Clou ist: Beides ist auf der Publishing Rule deaktiviert, trotzdem kommt der Fehler???

    Was mich stutzig macht - der Drill-Down in den Bericht funktioniert noch mit "Zugelassene Verbindung" in der TMG-Protokollierung, aber der Umlaut wird anders kodiert:

    GET http://<interner-fqdn>/Reports/Pages/Report.aspx?ItemPath=%2fPersonaldaten+und+Fortbildung%2fTestLeitBed+mit+%c3%9c

    Aber der Postback mit "Bericht anzeigen" wird dann im TMG-Protokoll als "Verweigerte Verbindung" so angezeigt:

    POST http://<externer-fqdn>/Reports/Pages/Report.aspx?ItemPath=%2fPersonaldaten+und+Fortbildung%2fTestLeitBed+mit+%u00dc

    Also einmal mit %c3%9c und dann mit %u00dc ?? Und am Bericht selbst und dem POST kann es auch nicht liegen, denn benennt unser Reporting-Admin den Bericht um, sodass kein Umlaut mehr enthalten ist, ohne den Bericht sonst irgendwie zu verändern, geht der generierte Bericht von extern auf. Also ist auch eine Berechtigungsthematik auszuschließen. Wobei ich gerade gesehen habe, wenn ich den Berichts-Server von intern anspreche, sieht man, dass die Links mit unterschiedlicher %-Kodierung eingebettet sind. Also die Links werden schon von der Seite so ausgeliefert.

    Wäre schön, wenn sich da irgendwer einen Reim drauf machen könnte ... weil dieses Problem könnte ja auch mit Anwendungs-Webservern auftreten, wo ich nicht einfach einen Bericht umbenennen kann ...

    Danke!


    • Bearbeitet Markus E Freitag, 30. März 2012 10:05 Spaß mit HTML-Editor ...
    Freitag, 30. März 2012 09:51

Antworten

  • Ich kann jetzt bestätigen, das Skript für die versteckte Einstellung CookieFilterDecodeUEncoding funktioniert - die Bericht-URLs mit %uXXXX funktionieren jetzt:

    http://support.microsoft.com/kb/940248

    Hier noch ein kleines "Goodie" für alle - basierend auf dem MS-Skript habe ich mir ein .vbs erstellt um zu prüfen, ob schon andere solche versteckten Parameter gesetzt sind und auf welchen wert. In eine Textdatei kopieren und zum Beispiel als Enum-MSVendorSet.vbs abspeichern. Sollte mit cscript Enum-MSVendorSet.vbs in cmd.exe ausgeführt werden.

    ' Enumerates all VendorSet parameters currently present on ISA/TMG. Based on a script by MS http://support.microsoft.com/kb/940248/en-us
    Option Explicit
    
    Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"
    
    
    Sub EnumValues()
    
        ' Create the root object.
        Dim root  ' The FPCLib.FPC root object
        Set root = CreateObject("FPC.Root")
    
        'Declare the other objects that are needed.
        Dim array       ' An FPCArray object
        Dim VendorSets  ' An FPCVendorParametersSets collection
        Dim VendorSet   ' An FPCVendorParametersSet object
    
        ' Get references to the array object
        ' and to the network rules collection.
        Set array = root.GetContainingArray
        Set VendorSets = array.VendorParametersSets
    
        On Error Resume Next
        Set VendorSet = VendorSets.Item( SE_VPS_GUID )
    
        If Err.Number <> 0 Then
            Err.Clear
    
            WScript.Echo "VendorSet " & SE_VPS_GUID & " does not exist yet."
            
            WScript.Exit
        Else
            WScript.Echo "Existing VendorSet found - GUID " & SE_VPS_GUID
        End If
    
        Dim allNames
        Dim name
    
        allNames = VendorSet.AllNames
        
        WScript.Echo "Number of properties: " & UBound(allNames) + 1
    
        For Each name in allNames
    
          Dim value    
    
          value = VendorSet.Value(name)
          
          If Err.Number <> 0 Then
            CheckError
          Else
            WScript.Echo "Name: " & name & ", Value: " & value & vbCrLf
          End If
    
        Next
        
        WScript.Echo "Done." & vbCrLf
    
    End Sub
    
    
    Sub CheckError()
    
        If Err.Number <> 0 Then
            WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description
            Err.Clear
        End If
    
    End Sub
    
    
    EnumValues
    
    
    ' EOF
    

    - Markus
    • Als Antwort markiert Markus E Montag, 2. April 2012 08:40
    Montag, 2. April 2012 08:40

Alle Antworten

  • So, ich habe jetzt noch ein wenig recherchiert, wie das mit Sonderzeichen in URLs aussieht und mein Wissen aufgefrischt. Von HTML her kannte ich die Sachen wie &uuml; und Konsorten und % in URLs (wie %20 - Leerzeichen) für Sonderzeichen.

    Also % ist in URLs "ein unsicheres Zeichen, da es für die Kodierung von anderen Zeichen verwendet wird" (http://www.ietf.org/rfc/rfc1738.txt). Also darf % nur in der Form in einer URL verwendet werden, sodass auf das Prozentzeichen zwei Hex Digits folgen, z. B.: %FC

    Handelt es sich um eine Unicode-Kodierung in UTF-8 dann werden zwei mit Prozent kodierte Zahlenpaare für ein Unicode-Zeichen verwendet: %C3%9C

    Ich kann jetzt momentan für die Kodierung mit %u und vier Hex-Digits (%u00dc) keinen Beleg in einem Standard finden, wird aber als Kodierung von URLs in UTF-16/UCS-2 öfters auf diversen Webseiten erwähnt/diskutiert.

    Weiß jemand etwas Näheres? Weil wenn es sich um eine Kodierung handelt, die von einem Standard gedeckt ist, müsste der TMG sowas auch unterstützen. Ansonsten ist es wahrscheinlich eine Frage an Reporting-Services-Fachleute, wie man eine entsprechende Kodierung erzwingt.

    Folgenden Artikel habe ich noch gefunden - den Vorschlag mit dem VBS-Skript muss ich ausprobieren, ansonsten bin ich mit dem Problem scheinbar nicht allein und viele versuchen das Problem schon auf der Webseite selbst zu lösen: http://forums.isaserver.org/m_2002110018/mpage_1/key_/tm.htm#2002110018

    - Markus

    Montag, 2. April 2012 07:49
  • Ich kann jetzt bestätigen, das Skript für die versteckte Einstellung CookieFilterDecodeUEncoding funktioniert - die Bericht-URLs mit %uXXXX funktionieren jetzt:

    http://support.microsoft.com/kb/940248

    Hier noch ein kleines "Goodie" für alle - basierend auf dem MS-Skript habe ich mir ein .vbs erstellt um zu prüfen, ob schon andere solche versteckten Parameter gesetzt sind und auf welchen wert. In eine Textdatei kopieren und zum Beispiel als Enum-MSVendorSet.vbs abspeichern. Sollte mit cscript Enum-MSVendorSet.vbs in cmd.exe ausgeführt werden.

    ' Enumerates all VendorSet parameters currently present on ISA/TMG. Based on a script by MS http://support.microsoft.com/kb/940248/en-us
    Option Explicit
    
    Const SE_VPS_GUID = "{143F5698-103B-12D4-FF34-1F34767DEabc}"
    
    
    Sub EnumValues()
    
        ' Create the root object.
        Dim root  ' The FPCLib.FPC root object
        Set root = CreateObject("FPC.Root")
    
        'Declare the other objects that are needed.
        Dim array       ' An FPCArray object
        Dim VendorSets  ' An FPCVendorParametersSets collection
        Dim VendorSet   ' An FPCVendorParametersSet object
    
        ' Get references to the array object
        ' and to the network rules collection.
        Set array = root.GetContainingArray
        Set VendorSets = array.VendorParametersSets
    
        On Error Resume Next
        Set VendorSet = VendorSets.Item( SE_VPS_GUID )
    
        If Err.Number <> 0 Then
            Err.Clear
    
            WScript.Echo "VendorSet " & SE_VPS_GUID & " does not exist yet."
            
            WScript.Exit
        Else
            WScript.Echo "Existing VendorSet found - GUID " & SE_VPS_GUID
        End If
    
        Dim allNames
        Dim name
    
        allNames = VendorSet.AllNames
        
        WScript.Echo "Number of properties: " & UBound(allNames) + 1
    
        For Each name in allNames
    
          Dim value    
    
          value = VendorSet.Value(name)
          
          If Err.Number <> 0 Then
            CheckError
          Else
            WScript.Echo "Name: " & name & ", Value: " & value & vbCrLf
          End If
    
        Next
        
        WScript.Echo "Done." & vbCrLf
    
    End Sub
    
    
    Sub CheckError()
    
        If Err.Number <> 0 Then
            WScript.Echo "An error occurred: 0x" & Hex(Err.Number) & " " & Err.Description
            Err.Clear
        End If
    
    End Sub
    
    
    EnumValues
    
    
    ' EOF
    

    - Markus
    • Als Antwort markiert Markus E Montag, 2. April 2012 08:40
    Montag, 2. April 2012 08:40