Получение «От клиента обнаружено потенциально опасное значение Request.Path (&)»

114

У меня проблема с устаревшим кодом, которая требует, чтобы я поддерживал случайные URL-адреса, как если бы они были запросами для домашней страницы. Некоторые URL-адреса содержат символы, вызывающие ошибку «От клиента обнаружено потенциально опасное значение Request.Path (&)» . Сайт написан на ASP.Net MVC 3 (на C #) и работает на IIS 7.5.

Вот пример URL ...

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

Вот как у меня настроен маршрут для приема всей почты домена (у меня есть другие маршруты для перехвата определенных страниц) ...

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

Я добавил в свой файл web.config следующее ...

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

Я также добавил атрибут ValidateInput к действию, которое должно перехватывать URL ...

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

Но я все еще получаю сообщение об ошибке. Есть идеи, почему? Я что-то пропустил? Прямо сейчас я просто работаю на своем локальном сервере разработки (я еще не пробовал эти исправления в производстве).

Брайан
источник
1
Есть настройка, позволяющая разрешить определенные символы, которые я проверю в ближайшее время, когда вернусь на компьютер ...... но можете ли вы указать URL-адрес?
Адам Тюлипер - MSFT
Я не знаю, по какой причине веб-сайт внутренне пытался выполнить перенаправление, которое создавало URL-адрес типа « localhost /: // localhost / myWebsiteName », который давал мне ту же ошибку. Я не знаю, почему конвейер ASP.net считает его опасным URL-адресом запроса.
RBT
В моем случае в URL-адресе отсутствовала косая черта. Первым делом нужно проверить URL-адрес на предмет опечатки.
Кишан Вайшнав,

Ответы:

162

Хотя вы можете попробовать эти настройки в файле конфигурации

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

Я бы не стал использовать такие символы, как '&' в пути URL, заменяя их символами подчеркивания.

Александр Прокофьев
источник
13
Похоже, что requestPathInvalidCharacters = "" помогло. Спасибо. Я определенно согласен с тем, что вам не следует использовать & в пути, к сожалению, мы разрешаем его годами, поэтому нам нужно продолжать его поддерживать.
Брайан
5
разве это не проблема безопасности?
Мариус Стэнеску
3
@MariusStanescu - это не проблема безопасности; это зависит от того, что вы с ним делаете. Если ввод взят, экранирован и включен в вывод, все будет в порядке. Если его не сбежать, вы можете подвергнуться нападению.
Джастин Хелгерсон 03
2
Это решение может привести к следующей ошибке: Ошибка HTTP 500.19 - Внутренняя ошибка сервера. Невозможно получить доступ к запрошенной странице, поскольку соответствующие данные конфигурации для страницы недействительны.
Том Стикель
2
При использовании этого ответа я также получил ошибку 500. Это произошло из-за того, что теги <httpRuntime> и <pages> уже были, поэтому возник конфликт дублирования. После решения этого ответа этот ответ отлично работает и для меня.
Каллум Тантон
5

Я столкнулся с такой ошибкой. для вызова функции из бритвы.

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

Решите это, изменив строку

из

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

в

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

где мой route.config

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
источник
1

Если вы хотите разрешить теги Html только для нескольких текстовых полей в mvc

Ты можешь сделать одну вещь

в контроллере

 [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();
}
павана
источник
1
OP явно говорит об URL-адресах, которые он должен поддерживать (а не о содержимом текстового поля), и также не упоминается HTML, поэтому ваш ответ действительно не относится к данному вопросу.
Оливер
2
Это не относится к вопросу, но я проголосовал за то, что я не знал, что это вариант. Спасибо @Pavan
MickJuice
0

Мы получали ту же ошибку в Fiddler, когда пытались выяснить, почему наш вьюер карт Silverlight ArcGIS не загружал карту. В нашем случае это была опечатка в URL в коде. Там почему-то был знак равенства.
http: = // someurltosome / awesome / place
вместо
http: // someurltosome / awesome / place

После того, как вы убрали этот знак равенства, он отлично работал (конечно).

Джош П.
источник
0

Убедитесь, что следующие строки присутствуют в вашем файле web.config

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

Balamurugan
источник