ASP.NET MVC: адреса jQuery не дозволяє користувачеві переходити на прямий URL

Ми розробляємо додаток Ajax і використовуємо плагін jQuery Address для завантаження різних сторінок програми Таким чином, URL для нашого сайту виглядає так: www.app.com #/SomeController/SomeAction. Перехід до такого url завантажує маршрут за замовчуванням для програми, а потім jQuery Address використовується для завантаження URL-адреси SomeController/SomeAction на розділ div на сторінці.

Проблема в тому, що користувач може отримати доступ до www.app.com/SomeController/SomeAction (без знаку хешування) безпосередньо, набравши URL-адресу в браузері. Як ми забороняємо користувачеві безпосередньо отримувати доступ до сторінок і вимагати, щоб у них був введений хеш-знак, щоб переконатися, що сторінки завантажуються через запит Ajax?

1
додано Автор Robert Harvey, джерело

3 Відповіді

Ви можете створити фільтр, який перевірив request.isajaxrequest (). Ви відхиляєте будь-який запитуваний, крім цього, за винятком маршруту за промовчанням.

Я не впевнений, що це найкращий спосіб.

1
додано

Створіть маршрут, який потрібно додати до вашого маршруту за замовчуванням, наприклад:

routes.MapRoute(
    "404 non-hashed",
    "{*fullPath}",
    new { controller = "Error", action = "Show404" },
    new { fullPath = @"^(?!#).+" }
);

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

Створіть контролер і дію, щоб відобразити сторінку 404 або іншу сторінку з помилками, і ви встановили.

1
додано

advsellorben правильно, ви можете робити маршрутизації трюки, щоб спробувати обмежити спосіб легітимних клієнтів або додатків запитувати певний ресурс, але ви ніколи не зможете захистити себе від кування (з скрипалем чи іншим інструментом). Підхід, запропонований advsellorben, є корисним лише для того, щоб потенційно уникати розгубленості користувачів та обмежити область "API" додатка. Звичайно, ви не повинні мати додаток, який залежить тільки від # глибоких посилань, оскільки це спричиняє проблеми з SEO та ін. Але це інша дискусія.

Інший підхід, а не фільтр, можна додати наступний метод дії

if (this.HttpContext.Request.IsAjaxRequest() != true)
            return RedirectToAction("Index");

стандартна практика тут, щоб дати якоря властивість порожній або манекен href, і щоб подія кліків виконувала зворотний виклик AJAX? Таким чином, якщо користувач копіює гіперпосилання, йому просто автоматично дається правильна URL-адреса.

0
додано
Дякую за коментар. Я цілком погоджуюсь з проблемою SEO, що може стати причиною, однак всі ці сторінки не будуть просканувати бот, оскільки користувач повинен бути автентифікований для доступу до програми.
додано Автор Nick Olsen, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug

ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram