Отримання "потенційно небезпечного 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
Існує налаштування, щоб дозволити певні символи, я незабаром перевіряю, коли повернусь до комп'ютера ...... але чи можете ви urlencode свою URL-адресу?
Адам Туліпер - MSFT


Я не знаю, з якої причини веб-сайт намагався перенаправити, який створював URL-адресу на зразок " localhost /: // localhost / myWebsiteName ", яка давала мені ту саму помилку. Я не знаю, чому трубопровід ASP.net вважає це небезпечною URL-адресою запиту.
RBT

У моєму випадку мені не вистачало косої риски в URL-адресі. Перше, що потрібно зробити, - це перевірити наявність помилки в URL-адресі.
Kishan Vaishnav

Відповіді:


162

Хоча ви можете спробувати ці налаштування у конфігураційному файлі

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

Я б уникнув використання символів типу "&" у шляху URL, замінивши їх підкресленнями.


13
Здається, що requestPathInvalidCharacters = "" зробив трюк. Дякую. Я, безумовно, погоджуюся, що ви не повинні використовувати & на шляху, на жаль, ми це дозволяємо роками, тому нам потрібно продовжувати його підтримувати.
Брайан

5
Хіба це не проблема безпеки?
Marius Stănescu

3
@MariusStanescu - це суттєво не питання безпеки; це залежить від того, що ти з цим робиш. Якщо вхід буде взято та уникнуто та включено до виходу, воно буде добре. Якщо не вдалося уникнути, то ви можете відкрити себе для нападу.
Джастін Гельгерсон

2
Це рішення може надати вам цю помилку: Помилка HTTP 500.19 - Внутрішня помилка сервера До запитуваної сторінки не можна отримати доступ, оскільки пов’язані дані конфігурації для сторінки недійсні.
Том Стікель

2
Я також отримав помилку 500 при використанні цієї відповіді. Це було пов’язано з тим, що вже були теги <httpRuntime> та <pages>, тому виник конфлікт дублювання. Після вирішення цього питання ця відповідь спрацювала і для мене.
Kallum Tanton

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
        );

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
ОП чітко говорить про URL-адреси, які він повинен підтримувати (не вміст текстового поля), а також не згадується про HTML - тому ваша відповідь дійсно не стосується даного питання.
Олівер

2
Це не стосується питання, але я підтримав, оскільки це щось, про що я не знав, це варіант. Дякуємо @Pavan
MickJuice

0

Ми отримували цю саму помилку у Фіддлера, коли намагалися з’ясувати, чому наш переглядач карт Silverlight ArcGIS не завантажував карту. У нашому випадку це була помилка в URL-адресі в коді. З якоїсь причини там був знак рівності.
http: = // someurltosome / awesome / місце
замість
http: // someurltosome / awesome / place

Знявши цей знак рівності, він працював чудово (звичайно).


0

Перевірте наведені нижче рядки у вашому файлі web.config

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.