Brechen Sie eine lange Zeile in einer .htaccess-Datei auf


10

Ich setze einen Content-Security-Policy-Header in meiner .htaccess-Datei und es ist eine extrem lange einzelne Zeile geworden, deren Verwaltung schwierig ist. Gibt es eine Möglichkeit, diese Linie in besser handhabbare Teilzeichenfolgen aufzuteilen?

Angenommen, ich setze einen Header wie

Header set Content-Security-Policy "deafult-src http://domainA.com; script-src http://domainB.com"

Ich kann (ohne offensichtliche Probleme) meinen speziellen Fall mit so etwas erreichen

Header append Content-Security-Policy "default-src http://domainA.com;"
Header append Content-Security-Policy "script-src http://domainB.com"

Da dadurch jedoch Kommas in die Zeichenfolge eingefügt werden, war ich immer noch gespannt, ob es eine bessere Antwort gibt, die allgemein angewendet werden kann, ohne die zusätzlichen Zeichen zur Antwort hinzuzufügen.

Ideal wäre es, wenn es ein Verkettungszeichen gäbe, mit dem ich die Zeichenfolge in kleinere Teile zerlegen könnte, wie z

Header set Content-Security-Policy "default-src http://domainA.com;"
\" script-src http://domainB.com"

oder

Header set Content-Security-Policy "default-src http://domainA.com;"^
" script-src http://domainB.com"

oder

Header set Content-Security-Policy "default-src http://domainA.com;"
+" script-src http://domainB.com"

Alternativ, wenn ich eine Art Variable setzen und deren Inhalt einfach ausgeben könnte, um so etwas zu tun

a="default-src http://domainA.com;"
b=" script-src http://domainB.com"
Header set Content-Security-Policy $a$b

das wäre auch viel überschaubarer.

Es gab ein ähnliches Thema, das für Nginx auftauchte, und die Schlussfolgerung war, nur mit den langen Schlangen zu leben (sie hatten es mit einem langen regulären Ausdruck zu tun, sodass die Append-Lösung nicht funktioniert hätte). Wird das auch bei Apache der Fall sein?


Wird das Halten der Umschalttaste und das Drücken der Eingabetaste nach jedem Ihrer Teilzeichenfolgen den Trick ausführen?
StixO

@StixO Nein, dieses Problem bezieht sich darauf, wie Apache Zeichenfolgen in Conf-Dateien analysiert. Im Allgemeinen (normalerweise HTML) verwenden Editoren eine solche Verknüpfung, um zwischen Zeilenumbrüchen (z. B. <br />) und Absatzumbrüchen (</ p>) zu unterscheiden. Dies hängt vom analysierten Markup-Format und vom Editor ab. Apache conf-Dateien sind reiner Text und unterscheiden sich daher nicht zwischen einer Zeile und einem Absatz (unabhängig vom Modifikator erzeugt enter ein einzelnes systemabhängiges Wagenrücklaufzeichen wie \ n oder \ r).
MaxPRafferty

Antworten:


14

Folgendes sollte funktionieren:

 Header set Content-Security-Policy "default-src http://domainA.com; \
      script-src http://domainB.com"

Ich habe das getestet und bekommen Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration.
Kasperd

1
@kasperd müssen Sie laufena2enmod headers
MaxPRafferty

@BazzaDP Interessant! Ich würde erwarten, dass dies dazu führen würde, dass der Server eine Escape-Newline sendet, aber es scheint, als würde es sich so verhalten, wie ich es möchte, und ist aus Sicht des Clients nicht wahrnehmbar.
MaxPRafferty

1
Wow, offensichtlich können Sie auf diese Weise jedem Leerzeichen entkommen. Bestätigt, auch mit \ <tab> zu arbeiten. .htaccess wird noch nie so gut ausgesehen haben!
MaxPRafferty

1
Huh, arbeitet sogar daran, Regex aufzubrechen! @BazzaDP, vielleicht möchten Sie diese Antwort auf die Nginx-Frage fallen lassen, die ich ebenfalls erwähnt habe. Vielleicht funktioniert sie auch dort.
MaxPRafferty

5

Ja - der Backslash funktioniert als Zeilenfortsetzung . Dies ist in der Apache 2.4-Dokumentation unter [ https://httpd.apache.org/docs/2.4/configuring.html#page-header] vergraben.

Wichtige Regeln:

  1. Leerzeichen innerhalb einer Zeile sind in Ordnung, dh. beliebig viele Tabulatoren und Leerzeichen;
  2. Das letzte Zeichen in allen Zeilen außer dem letzten muss ein Backslash sein; <
  3. Die letzte Zeile darf nicht mit einem Backslash enden.
  4. Das Apache-Kommentarzeichen (#) kann nicht zum Auskommentieren einer Zeile verwendet werden.

Wenn diese Regeln nicht eingehalten werden, antwortet der Server mit einem Fehler 500.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.