F5 Redes iRule / Tcl - Escape de sequências de escape UNICODE de 6 caracteres para que sejam processadas e reinseridas como a sequência de 6 caracteres?

2

Estamos tentando fazer com que uma iRule do F5 BIG-IP LTM funcione corretamente com o SharePoint 2007 em uma função de terminação SSL. Essa arquitetura transfere todo o processamento SSL para a F5 e a F5 encaminha solicitações / respostas interativas para os servidores front-end do SharePoint somente por meio de HTTP (em uma rede segura).

Para os propósitos desta discussão, as iRules são analisadas por um mecanismo de interpretação Tcl no dispositivo B-IP da F5 Networks.

Assim, a F5 faz duas coisas para trafegar passando por ela:

  1. Redireciona qualquer solicitação para a porta 80 (HTTP) para a porta 443 (HTTPS) por meio de redirecionamentos HTTP 302 e regravação de URL.
  2. Reescreve qualquer resposta ao navegador para reescrever seletivamente URLs incorporadas no HTML para que eles acessem a porta 443 (HTTPS). Isso impede que os redirecionamentos 302 quebrem o DHTML gerado pelo SharePoint.

Temos a parte 1 funcionando bem.

O principal problema da parte 2 é que na reescrita da resposta devido a namespaces XML e outros problemas semelhantes, nem todas as correspondências para "http:" podem ser alteradas para "https:". Alguns têm que permanecer "http:". Além disso, algumas das URLs "http:" são difíceis, pois vivem no JavaScript gerado pelo SharePoint e suas barras (ou seja, "/") são representadas no HTML pela cadeia de seis caracteres UNICODE, "\ u002f". / p>

Por exemplo, no caso desses truques, a string literal no HTML de saída é:

http:\u002f\u002fservername.company.com\u002f

E deve ser alterado para:

https:\u002f\u002fservername.company.com\u002f

Atualmente, não conseguimos nem descobrir como obter uma correspondência em uma expressão de pesquisa / substituição nesses literais de sequência de seqüência UNICODE. Parece que não importa como nós o dividimos, o interpretador Tcl está interpretando a string "\ u002f" na tradução "/" antes de fazer qualquer outra coisa.

Nós tentamos várias combinações de métodos de escape Tcl que conhecemos (principalmente aspas duplas e usando um extra "\" para escapar do "\" na string UNICODE), mas estamos procurando por mais métodos, de preferência aqueles que funcionam .

Alguém tem alguma idéia ou alguma indicação de onde podemos efetivamente nos autoeducar sobre isso?

Muito obrigado antecipadamente.

    
por 3 revs, 2 users 67%anon 01.12.2009 / 01:08

5 respostas

1

O que você está tentando fazer não é recomendado com o SharePoint.

A abordagem recomendada é usar Mapas de Acesso Alternativo dentro do SharePoint. Você criará uma URL pública de https: // e terá um nome interno de http: //.

Isso fará com que todos os URLs da sua página sejam criados usando https: //

Você pode perguntar isso no ServerFault http://serverfault.com se não gostar da resposta.

    
por 29.05.2009 / 06:36
1

@JD, eu provavelmente deveria ter adicionado isto:

O Aplicativo Web do SharePoint em questão está hospedado atualmente em um servidor físico e no Farm do SharePoint que está integrado (em outros aplicativos da Web) ao SQL Server 2005 Reporting Services (SSRS) e ao PerformancePoint 2007 (PPS). Ambos os produtos NÃO suportam mapeamentos de acesso alternativo (AAM).

Embora seja verdade que o Web Application que queremos fazer acima não esteja integrado ao SSRS ou ao PPS, nosso arquiteto e nossos líderes técnicos preferirão evitar o uso do AAM nesse ambiente, se possível.

Então, enquanto em princípio, eu concordo com sua resposta, neste caso, eu estou pedindo uma exceção especial e estou perguntando sobre Tcl e UNICODE escapando em particular porque eu e nossos outros estrategistas técnicos acreditamos que esta é a resposta correta neste situação particular.

    
por 03.06.2009 / 17:42
0

Eu não sei nada sobre o sharepoint, mas pelo menos do ponto de vista do tcl puro, o seguinte mostra como corresponder a sua string literal:

tclsh> set string {http:\u002f\u002fservername.company.com\u002f}
http:\u002f\u002fservername.company.com\u002f
tclsh> regexp {http:\u002f} $string
1

O importante é garantir que a barra invertida em \ u002f não seja interpretada pelo analisador tcl (colocando o padrão em {}) e também garantir que a barra invertida não seja interpretada pelo analisador de expressões regulares ( escapando com uma barra invertida).

    
por 24.07.2009 / 15:53
0

Para referência futura, uma vez que esta surgiu recentemente ...

O Mapeamento de Acesso Alternativo do SharePoint é a solução mais limpa.

Para uma iRule do BIG-IP, você pode tentar algo assim. Note que o TCL precisa interpretar os caracteres unicode antes que ele possa combiná-los.

when HTTP_REQUEST {
    # Disable the stream filter by default
    STREAM::disable
}
when HTTP_RESPONSE {
    if {[HTTP::header value Content-Type] contains "text"}{
        set find_str "http:\u002f\u002fservername.company.com\u002f"
        set replace_str "https:\u002f\u002fservername.company.com\u002f"

        STREAM::expression "@$find_str@$replace_str@"
        STREAM::enable
    }
}

Aaron

    
por 31.05.2013 / 03:43
0

substitua \ 123 \ abc por \ 456 \ def

STREAM :: expressão {@ \\ 123 @ \ 456 @ @ \\ abc @ \ def @}

    
por 17.06.2016 / 11:05