запит перевищує налаштований maxQueryStringLength при використанні [Авторизувати]


122

введіть тут опис зображення
У мене сайт MVC3 в C #, у мене конкретний вигляд подається параметрами запиту від функції JavaScript, функція перенаправляє на сайт через

window.location.href = "../ActionName?" + query_string;

query_string - це рядок параметрів динамічного запиту, побудований функцією JavaScript.

Причина цієї дивацтва полягає в тому, що іноді одна і та ж функція передає URL до веб-форми ASP.Net через те, що їй потрібно використовувати елемент управління переглядачем звітів , альтернативна дія полягає в збереженні деяких параметрів, і в цьому випадку вона переходить до подання. (Можна розробити більше, якщо це не має сенсу)

Вся справа працює добре, поки я не введу [Авторизувати] метод дії. Порушення, якщо воно є на місці, працює нормально без, і [Авторизувати] працює нормально для всіх інших методів.

Уся URL-адреса в цьому випадку становить 966 символів, після дослідження здається, що значення maxQueryStringLength за замовчуванням становить 2048, але може перевищувати будь-яке значення цілого типу, тому лише для усмішок я додав

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2048"></requestLimits>
  </requestFiltering>
</security>

ключ до веб-конфігураційного файла під клавішею.

Ніякої радості там немає, тому я засміявся і зробив це 4096, все ще ніякої радості.

Тепер, коли ціла URL-адреса становить 966 символів, атрибут авторизації не може серйозно додавати ще 1082-3130 символів, тож як я можу визначити, що помилка насправді є, чи чому налаштування не діє.

VS2010 Pro SP1


Будь ласка, додайте детальне повідомлення про помилку, яке ви отримуєте.
радник

Відповіді:


70

Коли надходить несанкціонований запит, весь запит кодується URL-адресою та додається у вигляді запиту до запиту до форми авторизації, тож я можу побачити, де це може призвести до проблеми з урахуванням вашої ситуації.

Відповідно до MSDN, правильний елемент для зміни для скидання maxQueryStringLength в web.config є <httpRuntime>елементом всередині <system.web>елемента, див. HttpRuntime Element (Схема налаштувань ASP.NET) . Спробуйте змінити цей елемент.


1
На жаль, здається, що це правильне місце, здається, фокус, достатня інтелігенція перекладає мене на той самий ключ у тому місці, в якому я його спочатку розмістив.
Шабля

8
Також добре знати, що максимальне значення для цього параму - 2097151 - спочатку я намагався використовувати Int32.MaxValue, але виняток, який був кинутий під час виконання, вказував мені на використання значення між 0 і 2097151.
TimDog

не працює, бачимо це. stackoverflow.com/questions/31624710/…
Jitendra Pancholi

1
Я вважаю, що хоча ви можете встановити максимальне значення для цього параметра на 2097151, є й інші параметри, які впливають на максимальну довжину запиту, прийняту. У мене був рядок запиту набагато коротший, ніж цей макс., Який не був прийнятий - він був довжиною 3 393 символи. Ще один запит, який тривав 3200 символів, працював чудово.
markthewizard1234

@ Markthewizard1234: Погоджено: я збільшив мій від 2048 до 4096. Це вже мало певний ефект, як вихідне повідомлення про помилку з 404.something для рядка запиту занадто довгі, не виникає більше. Але тепер повертається ще одне повідомлення про помилку з кодом 400, що також вказує на надмірний рядок запиту.
АБО Mapper

213

У корені web.configвашого проекту під system.webвузлом:

<system.web>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
...

Крім того, мені довелося додати це під system.webServerвузлом, або я отримав помилку безпеки для своїх довгих рядків запитів:

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
...

1
Чи відкриття це відкриває якісь серйозні вади безпеки? Які негативи є у встановленні maxurl та maxquery на 2097151?
Брайан

1
Брайан, це прекрасне запитання - я не бачу жодних недоліків безпеки, якщо якимось чином довгі запити, крім межі браузера, якимось чином можуть бути шкідливими. Чи мають рядки запитів максимальної довжини браузера над цим значенням - це ще одне питання, на яке я не маю відповіді. Дякую за запитання, можливо, хтось тут може пролити більше світла на це.
theJerm

Я думаю, існує потенційна вразливість DOS, але це залежить від того, як ви насправді обробляєте запит. Я зіткнувся з цим, намагаючись додати 100 користувачів в одному запиті. Я не хочу щось робити.
Мартін

4
Це вирішило мою проблему негайно, оскільки у мене була та сама проблема у проекті MVC 4. Додавання обох наведених вище вирішило мою помилку. Дуже дякую!!
Ed DeGagne

3
Розум maxQueryString- це довжина в байтах як uint з максимальним значенням 4294967295 і maxQueryStringLengthє довжиною в символах як int, але з діапазоном 0-2097151.
марш

5

Для всіх, хто може зіткнутися з цією проблемою, і її не вирішує жоден із варіантів, описаних вище, саме це працювало для мене.

1. Click on the website in IIS
2. Double Click on Authentication under IIS
3. Enable Anonymous Authentication

Я відключив це, оскільки ми використовували власний Auth, але це призвело до цієї самої проблеми, і прийнята відповідь жодним чином не допомогла.


4

у мене ця помилка при використанні datatables.net

я виправив зміну ajax за замовчуванням Перейти до POST у властивості DataTable ()

"ajax": {
        "url": "../ControllerName/MethodJson",
        "type": "POST"
    },

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