Можно ли надежно проверить имя хоста?

# #node.js #firebase #express #google-cloud-functions

Вопрос:

У меня есть облачная функция, которую я хочу вызывать только тогда, когда запросы исходят из моего домена.

 export const createMatch = functionUS.https.onCall(async (data, context) => {
  if (context.auth === null || context.auth?.uid == null || data?.userId !== context.auth?.uid)
    throw new functions.https.HttpsError("unauthenticated", "not authenticated");

  try {
    const user = await admin.auth().getUser(context.auth.uid);
    if (!user.displayName) throw new functions.https.HttpsError("failed-precondition", "username is missing");
    data.username = user.displayName;

    const matchRepo = new MatchRepository(new FirestoreMatchProvider("matches"));
    const match = Match.fromMap(new Map<string, any>(Object.entries(data)));
    if (!match.isValid()) throw new functions.https.HttpsError("failed-precondition", "match data is not valid");
    await matchRepo.createMatch(match, context.auth.uid);
  } catch (error) {
    functions.logger.error(`handleMatchCreate: ${error}`);
  }
});
 

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

Потому что кто-то мог бы заглянуть в код, получить мою конфигурацию firebase и создать для себя приложение, которое просто отправляет запросы, когда захочет. А это не то, чего я хочу.

Ответ №1:

Это часть протокола HTTP, вы не можете его изменить. Просто не полагайтесь на сетевой уровень (DNS и IP). Ты не можешь сделать большего