Wie gehe ich mit der Domänen-Whitelist um?

Wie gehe ich mit der Domänen-Whitelist um?

Ich versuche herauszufinden, wie ich mit der Whitelistung bestimmter Domänennamen umgehen kann. Wenn die Anfrage von einer bestimmten Subdomäne stammt, z. B. <id>.domain-name.com, wird der Zugriff auf die Bilder auf eine Whitelist genehmigter Domänen beschränkt. Anfragen von Domänen, die nicht auf der Whitelist stehen, führen zu einem 403-Fehler.

Ich bin nicht sicher, was ich genau tun soll? Verwende ich mapden Kontext?

Beispielsweise würde meine nginx.conf ungefähr so ​​aussehen

map $http_host $whitelist {
  default 0;
  "~^(?<id>\w+)\.domain-name\.example\.com$" $id;

  # whitelist domains
  whitelist1 1;
  whitelist2 1;
}

server {
  listen 80;
  proxy_intercept_errors on;

  error_page 400 = @fallback;

  if ($whitelist = 0) {
    return 403;
  }

  proxy_pass $whitelist;
}

Antwort1

Ihre nginxKonfiguration sieht größtenteils korrekt aus, Sie können jedoch einige Änderungen vornehmen, um sicherzustellen, dass sie wie erwartet funktioniert.

Zuerst müssen Sie die eigentliche Whitelist der Domänen definieren, die auf die Bilder zugreifen dürfen. In Ihrer aktuellen Konfiguration haben Sie zwei Whitelist-Domänen als whitelist1und definiert whitelist2. Sie sollten diese durch die tatsächlichen Domänennamen ersetzen, die auf die Bilder zugreifen dürfen.

Zweitens haben Sie in Ihrem Map-Kontext die Variable als Wert der Subdomäne definiert, $whitelistdie die Anfrage stellt. Was Sie jedoch tatsächlich benötigen, ist der Wert des Domänennamens, der die Anfrage stellt, ohne die Subdomäne. Sie können Ihren Map-Kontext ändern, um den Domänennamen wie folgt zu extrahieren:

map $http_host $whitelist {
  default 0;
  "~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;

  # whitelist domains
  whitelist1 example.com;
  whitelist2 subdomain.example.com;
}

Im obigen Beispiel erfasst der reguläre Ausdruck die Subdomäne und den Domänennamen getrennt. Die Variable $domainwird dann auf den Wert des Domänennamens ohne die Subdomäne gesetzt.

Schließlich können Sie die $whitelistVariable in Ihrem Serverblock verwenden, um zu bestimmen, ob der Zugriff auf die Bilder erlaubt oder verweigert werden soll. Ihre aktualisierte Konfiguration würde folgendermaßen aussehen:

map $http_host $whitelist {
  default 0;
  "~^(?<subdomain>\w+)\.(?<domain>domain-name\.example\.com)$" $domain;

  # whitelist domains
  whitelist1 example.com;
  whitelist2 subdomain.example.com;
}

server {
  listen 80;
  proxy_intercept_errors on;

  error_page 400 = @fallback;

  if ($whitelist = 0) {
    return 403;
  }

  location /images {
    # allow access only to whitelisted domains
    allow $whitelist;
    deny all;

    # serve images from disk
    alias /path/to/images;
  }

  location @fallback {
    # handle errors
    return 400;
  }
}

verwandte Informationen