2016-04-01 5 views
-1

Недавно я установил httpHandler для защиты моих HTML-файлов от непосредственного привлечения гнусных пользователей. Я никогда не делал ничего подобного раньше, и, проведя много исследований, использование httpHandler было лучшим результатом. Однако все учебники объяснили, как настроить обработчик, но затем все, казалось, закончилось чем-то вроде «Теперь просто проверьте, является ли запрос законным или нет!» не объясняя, как это можно сделать.Определите, является ли запрос легитимным в HttpHandler

Существует множество примеров того, как останавливать запросы, поступающие из других доменов, например, для остановки воспроизведения изображения. То, что я хочу сделать, это разрешить запросы на файлы HTML, созданные моим угловым слоем, но блокировать запросы, сделанные непосредственно браузером. То есть, если Angular запрашивает HTML-шаблон, он должен его получить, но если кто-то вводит «mysite.com/static/templates/template.html» в панель браузера, он должен быть заблокирован.

Решение, с которым я столкнулся, состоит в том, чтобы иметь угловую отправку настраиваемого заголовка с каждым запросом; httpHandler затем ищет наличие этого заголовка и возвращает HTML-файл, если заголовок присутствует. Таким образом, если запрос не исходит из Угловой экосистемы, он не имеет заголовка и получает отскок. Существуют две проблемы с этим методом:

  1. Немного хрупкий. У нас были (по общему признанию, редкие) сообщения от пользователей, которые блокировались, когда им этого не было, и я не смог определить, почему это происходит.

  2. Это не работает, скажем, для файлов javaScript. Файлы JS не загружаются одинаково, поэтому я не могу защитить их таким же образом.

Есть ли лучший способ сообщить, пришел ли запрос непосредственно из панели браузера или законно из моего пользовательского интерфейса?

Передний конец угловой, задний конец - .NET 4.5.

ответ

0

Нет, нет. Лучшее, что вы можете сделать, это посмотреть на заголовки. Для «гнусного» пользователя тривиально копировать все, что похоже на законный заголовок, и получать данные в любом случае.

Если вы думаете о том, что происходит, нет никакой технической разницы между вводом URL-адреса, браузером, загружающим ресурс, или вызовом ajax (за исключением заголовков). Даже если вы используете https, это можно легко воспроизвести с помощью таких инструментов, как Fiddler или двух-трех строк кода на большинстве современных языков.

Я не знаю, почему вы это делаете, но если это связано с пропускной способностью или чем-то другим, я бы рекомендовал кэширование. Это способ детально описать тему, чтобы войти сюда, поэтому я не буду.

Если вы нуждаетесь в безопасности своих файлов (например, вы не хотите, чтобы кто-то смотрел файл js или html-файл, помимо браузера), то вам в основном не повезло, потому что такая вещь не является Даже возможно.

 Смежные вопросы

  • Нет связанных вопросов^_^