Brisez une longue file d'attente dans un fichier .htaccess


10

J'installe un en-tête Content-Security-Policy dans mon fichier .htaccess, et il est devenu une ligne unique extrêmement longue, ce qui est gênant à gérer. Existe-t-il un moyen de diviser cette ligne en sous-chaînes plus gérables?

Par exemple, disons que je mets un en-tête comme

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

Je peux (sans problèmes de rupture évidents) accomplir mon cas spécifique avec quelque chose comme

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

mais cela insérera des virgules dans la chaîne, donc j'étais toujours curieux de savoir s'il y avait une meilleure réponse qui pourrait être appliquée de manière générale, sans ajouter les caractères supplémentaires à la réponse.

L'idéal serait qu'il y ait un caractère de concaténation que je pourrais utiliser pour diviser la chaîne en parties plus petites, comme

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

ou

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

ou

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

Alternativement, si je pouvais définir une sorte de variable et simplement vider leur contenu pour faire quelque chose comme

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

ce serait aussi beaucoup plus gérable.

Il y avait un sujet similaire qui a été soulevé pour nginx et la conclusion était juste de vivre avec les longues lignes (ils traitaient d'une longue expression régulière, donc la solution d'ajout n'aurait pas fonctionné); Est-ce que ce sera également le cas pour Apache?


Est-ce que tenir Maj et appuyer sur Entrée après chacune de vos sous-chaînes fera l'affaire?
StixO

@StixO Non, ce problème concerne la façon dont apache analyse les chaînes dans les fichiers conf. En général (généralement HTML), les éditeurs utilisent un tel raccourci pour différencier les sauts de ligne (par exemple, <br />) et les sauts de paragraphe (</p>). Cela dépendra du format de balisage analysé et de l'éditeur. Les fichiers de configuration Apache sont du texte pur et, en tant que tels, ne font aucune différence entre une ligne et un paragraphe (quel que soit le modificateur, enter produit un seul caractère de retour chariot dépendant du système comme \ n ou \ r).
MaxPRafferty

Réponses:


14

Les éléments suivants devraient fonctionner:

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

J'ai testé et obtenu Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration.
kasperd

1
@kasperd vous devez exécutera2enmod headers
MaxPRafferty

@BazzaDP Intéressant! Je m'attendrais à ce que cela amène le serveur à envoyer une nouvelle ligne échappée, mais il semble que cela concorde comme je le souhaiterais et est imperceptible du point de vue des clients.
MaxPRafferty

1
Wow, en fait, évidemment, vous pouvez échapper à n'importe quel personnage d'espaces blancs de cette façon. Vous avez également confirmé que vous travailliez avec \ <tab>. .htaccess n'aura jamais été aussi beau!
MaxPRafferty

1
Huh, travaille même pour briser les regex! @BazzaDP, vous voudrez peut-être aller déposer cette réponse sur cette question nginx que j'ai mentionnée également, pourrait y fonctionner aussi.
MaxPRafferty

5

Oui - la barre oblique inverse fonctionne comme une continuation de ligne . Ceci est enterré dans la documentation Apache 2.4 sur [ https://httpd.apache.org/docs/2.4/configuring.html#page-header]

Règles importantes:

  1. L'espace dans une ligne est très bien, ie. n'importe quel nombre d'onglets et d'espaces;
  2. Le dernier caractère de toutes les lignes sauf la dernière doit être une barre oblique inverse; <
  3. La dernière ligne ne doit pas se terminer par une barre oblique inverse;
  4. Le caractère de commentaire Apache (#) ne peut pas être utilisé pour commenter une ligne.

Si ces règles ne sont pas respectées, le serveur répondra avec une erreur 500.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.