Obtendo “Um valor Request.Path potencialmente perigoso foi detectado do cliente (&)”

114

Eu tenho um problema de código legado que exige que eu suporte urls aleatórias como se fossem solicitações para a página inicial. Alguns dos URLs contêm caracteres que geram o erro "Um valor Request.Path potencialmente perigoso foi detectado do cliente (&)" . O site foi escrito com ASP.Net MVC 3 (em C #) e está sendo executado no IIS 7.5.

Aqui está um exemplo de URL ...

http://mywebsite.com/Test123/This_&_That

Veja como tenho minha configuração de rota geral (tenho outras rotas para acessar páginas específicas) ...

routes.MapRoute(
    "Default", // Route name
    "{garb1}/{garb2}", // URL with parameters
    new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);

Eu adicionei os seguintes itens ao meu arquivo web.config ...

<configuration>
    <system.web>
        <pages validateRequest="false" />
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
<configuration>

Também adicionei o atributo ValidateInput à ação que deve capturar os urls ...

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}

Mas ainda estou recebendo o erro. Alguma ideia por quê? Perdi alguma coisa? No momento, estou apenas executando no meu servidor de desenvolvimento local (ainda não tentei essas correções na produção).

Brian
fonte
1
Há uma configuração para permitir determinados caracteres que verificarei em breve quando voltar ao computador ... mas você pode codificar seu URL por url?
Adam Tuliper - MSFT
Não sei por que motivo o site estava internamente tentando um redirecionamento que estava criando uma URL como ' localhost /: // localhost / myWebsiteName ' que estava me dando o mesmo erro. Não sei por que o pipeline ASP.net o considera um URL de solicitação perigoso.
RBT
No meu caso, estava faltando uma barra no URL. A primeira coisa a fazer seria verificar se há algum erro de digitação no URL.
Kishan Vaishnav

Respostas:

162

Embora você possa tentar essas configurações no arquivo de configuração

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

Eu evitaria usar caracteres como '&' no caminho da URL, substituindo-os por sublinhados.

Alexander Prokofyev
fonte
13
Parece que requestPathInvalidCharacters = "" resolveu o problema. Obrigado. Eu definitivamente concordo que você não deve usar & no caminho; infelizmente, temos permitido isso há anos, então precisamos continuar a apoiá-lo.
Brian de
5
não é um problema de segurança?
Marius Stănescu
3
@MariusStanescu - Não é inerentemente um problema de segurança; depende do que você faz com ele. Se a entrada for obtida, escapar e incluída com a saída, tudo bem. Se não houver escape, você poderá se expor a um ataque.
Justin Helgerson
2
Esta solução pode gerar este erro: Erro HTTP 500.19 - Erro interno do servidor A página solicitada não pode ser acessada porque os dados de configuração relacionados para a página são inválidos.
Tom Stickel de
2
Também recebi um erro 500 ao usar esta resposta. Isso era devido ao fato de já haver as tags <httpRuntime> e <pages>, portanto, havia um conflito de duplicação. Depois de resolver isso, essa resposta funcionou bem para mim também.
Kallum Tanton
5

Já enfrentei esse tipo de erro. para chamar uma função de navalha.

public ActionResult EditorAjax(int id, int? jobId, string type = ""){}

resolva isso mudando a linha

de

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

para

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />

onde meu route.config está

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults
        );
reza.cse08
fonte
1

Se você quiser permitir tags Html apenas para algumas caixas de texto em mvc

Você pode fazer uma coisa

no controlador

 [ValidateInput(false)]
public ActionResult CreateNewHtml()  //view
{
    return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class
{
    repo.AddHtml(obj);
    return View();
}
Pavan
fonte
1
O OP fala explicitamente de URLs que ele precisa suportar (não o conteúdo da caixa de texto) e também não há menção a HTML - portanto, sua resposta realmente não se aplica à pergunta fornecida.
Oliver
2
Não se aplica à pergunta, mas votei positivamente porque era algo que não sabia ser uma opção. Obrigado @Pavan
MickJuice
0

Estávamos recebendo o mesmo erro no Fiddler ao tentar descobrir por que nosso visualizador de mapa do Silverlight ArcGIS não estava carregando o mapa. No nosso caso, foi um erro de digitação na URL do código. Havia um sinal de igual ali por algum motivo.
http: = // someurltosome / awesome / place em
vez de
http: // someurltosome / awesome / place

Depois de tirar o sinal de igual, funcionou muito bem (é claro).

Josh P
fonte
0

Verifique se as linhas abaixo estão presentes em seu arquivo web.config

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>

Balamurugan
fonte