Trailing dots in url resultam na página 404 vazia no IIS

2

Eu tenho um site ASP.NET no IIS8, mas o IIS7.5 se comporta exatamente da mesma maneira. Quando eu digito um URL como:

mysite.com/foo/bar..

Eu recebo o seguinte erro com um código de status '500 Internal Server Error':

mesmoqueeutenhapáginasdeerropersonalizadasconfiguradaspara500e404enãovejonadadeerradocomaminhapáginadeerropersonalizada.

Nomeunóweb.configsystem.webeutenhooseguinte:

<customErrorsmode="On">
  <error statusCode="404" redirect="/404.aspx" />
</customErrors>

Se eu remover essa seção, recebo uma resposta 404.0 de volta, mas a própria página está em branco.

No web.config system.webServer eu tenho:

<httpErrors errorMode="DetailedLocalOnly">
  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" prefixLanguageFilePath="" path="404.html" responseMode="File" />
</httpErrors>

Mas quer isso esteja lá ou não, recebo a mesma página 404.0 em branco do que a minha página de erro personalizada esperada, ou pelo menos uma mensagem interna do IIS.

Então, primeiro de tudo, porque o manipulador asp.net está pegando um pedido para '..' (também funciona com um ou mais pontos à direita)

Se eu remover o seguinte manipulador de applicacationHost.config:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />

Eu recebo minha página 404 personalizada esperada, mas é claro que remover esse manipulador interrompe o roteamento no asp.net entre outras coisas.

Olhando para o traço da falha, vejo:

AautenticaçãodoWindowsestádesativadaparaosite,entãoporqueessemóduloestánopipelinedesolicitação?

Porenquanto,minhacorreçãoéusaromóduloURLRewritecomaseguinteregra:

<rewrite><rules><rulename="Trailing Dots" stopProcessing="true">
            <match url="\.+$" />
            <action type="Rewrite" url="/404.html" appendQueryString="false" />
        </rule>
    </rules>
</rewrite> 

Isso funciona bem, mas me pergunto por que o IIS / ASP.NET se comporta dessa maneira?

    
por Peter Hahndorf 10.12.2012 / 17:51

2 respostas

2

Há um KB sobre isso: link

O resultado disso é que há um problema de ordem de operações em que os manipuladores do .NET para várias funções se confundem e desviam coisas. Alguns dos manipuladores do .NET reescrevem o URL para um formulário sem extensão e podem surtar outras coisas.

A correção de solução curta é mover todos os manipuladores "ExtensionlessUrlHandler" para o final da lista, depois de adicionar qualquer personalizado que possa tocar nos dados de PathInfo.

Pode não ser o seu erro exato, mas vale a pena tentar. E vale a pena lembrar que a ordem do manipulador é configurada pela ordem ADD no ApplicationHost.Config e nos arquivos de configuração relacionados!

    
por 10.12.2012 / 20:19
0

Adicionar este atributo na seção httpRuntime pode ajudar você:

<configuration>
  <system.web>
    <httpRuntime ... relaxedUrlToFileSystemMapping="true" .../>
  </system.web>
</configuration>

Gets or sets a value that indicates whether the URL in an HTTP request is required to be a valid Windows file path.

Mais informações sobre relaxedUrlToFileSystemMapping

    
por 29.10.2016 / 13:18