Направляйте все запросы в функцию, в том числе с параметрами - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь перенаправить ВСЕ запросы на http function.

Я мог видеть, что наша функция будет вызываться для каждого example.com/someID запроса, но не для * 1007. *. Это потому, что у нас есть папка с именем folder1, которая игнорирует правило перенаправления, но у нас нет папки someID, поэтому она слушает правило (и вызывает функцию)

 exports.contentServer = functions.https.onRequest((request, response) => {

Я бы хотелперенаправить всех наших запросов, даже если для этого URL существует путь.

Мой файл firebase.json выглядит следующим образом:

  "hosting": {
    "rewrites": [
      {
        "source": "**",
        "function": "contentServer"
      }
    ],
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
  "headers": [ {
  "source" : "**/*.@(jpg|jpeg|gif|png)",
  "headers" : [ {
    "key" : "Access-Control-Allow-Origin",
    "value" : "*"
    } ]
  } ]

  },

РЕДАКТИРОВАТЬ С УТОЧНЕНИЕМ

У меня есть такой путь public/fodler1/index.html или public/fodler2/index.html.

Обычно, когда пользователь вводит example.com/someID, я возвращаю из функции example.com/fodler1/?parm=1&parm=2 или example.com/fodler2/?parm=1&parm=2, основанной на переменной someID.

Теперь, если хакер сделает это с возвращенным URL: example.com/fodler1/?parm=fake!, я бы хотелзнать, что перенаправляет этот URL также на function и идентифицировать это. Но , поскольку у этого URL уже есть существующий путь - example.com/fodler1/, Firebase проигнорирует мое правило перенаправления и предоставит клиенту поддельную страницу с поддельными параметрами. (в отличие от example.com/SOMEID, без папки1)

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

Итак, даже если у меня есть папки с папками 1/2, я все равно хотел бы перейти к своей функции.

В соответствии с документамипорядок приоритетов следующий:

  1. Зарезервированные пространства имен, начинающиеся с / __ / * сегмента пути

  2. Настроенные перенаправления

  3. Статическое содержимое с точным соответствием

  4. Настроенные изменения

Это означает, что, поскольку у меня есть точное совпадение с содержимым (папка существует), оно не будет перезаписано.

1 Ответ

0 голосов
/ 24 октября 2019

Я могу думать по разным сценариям:

1. Переместите валидацию в свои модули

Вы можете переместить этот логический процесс в свой код.

Я могу подумать о следующем:

  • Вместо того, чтобы обслуживать файлы из файла JSON, вы можете отправить весь запрос на одну конечную точку или функцию.

    • Эта функция отобразит все входящие запросы и отправит их в соответствующий модуль вашего приложения.
  • Например, если запрос вы получитесоответствует «public / fodler1 / *», вы можете проверить, что фактический файл, который они пытаются вызвать, существует.

    • Если он существует, вы возвращаете его.

    • Если нет, вы отправляете ошибку.

2. Настройте свой ответ 404

Вы можете подать пользовательскую ошибку 404 Not Found , когда пользователь пытается получить доступ к несуществующей странице.

Создатьновый файл в общедоступном каталоге вашего проекта, назовите его 404.html, затем добавьте в файл пользовательский контент 404 Not Found.

Firebase Hosting отобразит содержимое этой пользовательской страницы 404.html, если браузер сработаетошибка 404 Not Found в вашем домене или поддомене.

3. Используйте Regex для проверки ваших файлов

Используйте Regex в вашем JSON для проверки того, что объект (ы) существуют.

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

Вы также можете нормализовать свои файлы, чтобы все могли совпадать с Regex для использования в вашем JSON. Однако эта последняя идея может быть не самой лучшей, потому что мы вернемся к вашей первоначальной проблеме: если хакер получит это Regex, усилия будут тщетными.

Надеюсь, это полезно.

...