Romper una línea larga en un archivo .htaccess


10

Estoy configurando un encabezado de Content-Security-Policy en mi archivo .htaccess, y ha crecido hasta convertirse en una línea única extremadamente larga, que es una molestia de administrar. ¿Hay alguna manera de dividir esta línea en subcadenas más manejables?

Como ejemplo trivial, digamos que estoy configurando un encabezado como

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

Puedo (sin problemas de ruptura obvios) lograr mi caso específico con algo como

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

pero eso insertará comas en la cadena, por lo que todavía tenía curiosidad por saber si había una mejor respuesta que pudiera aplicarse en general, sin agregar los caracteres adicionales a la respuesta.

Lo ideal sería si hubiera algún carácter de concatenación que pudiera usar para dividir la cadena en partes más pequeñas, como

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

o

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

o

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

Alternativamente, si pudiera establecer algún tipo de variable y simplemente volcar su contenido para hacer algo como

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

eso también sería mucho más manejable.

Hubo un tema similar que surgió para nginx y la conclusión fue solo vivir con las largas colas (estaban lidiando con una expresión regular larga, por lo que la solución de agregar no habría funcionado); ¿Será ese el caso de Apache también?


¿Mantener presionada la tecla shift y presionar enter después de que cada una de sus subcadenas haga el truco?
StixO

@StixO No, este problema se relaciona con la forma en que apache analiza las cadenas en los archivos conf. En general, los editores (generalmente HTML) usarán dicho acceso directo para diferenciar entre saltos de línea (digamos, <br />) y saltos de párrafo (</p>). Esto dependerá del formato de marcado que se esté analizando y del editor. Los archivos conf de Apache son texto puro y, como tales, no tienen diferenciación entre una línea y un párrafo (independientemente del modificador, enter produce un único carácter de retorno de carro dependiente del sistema como \ n o \ r).
MaxPRafferty

Respuestas:


14

Lo siguiente debería funcionar:

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

Probé esto y lo conseguí Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration.
kasperd

1
@kasperd necesitas correra2enmod headers
MaxPRafferty

@BazzaDP ¡Interesante! Esperaría que esto causara que el servidor envíe una nueva línea escapada, pero parece que concatena de la manera que quisiera y es imperceptible desde la perspectiva de los clientes.
MaxPRafferty

1
Wow, en realidad, evidentemente puedes escapar de cualquier personaje de espacio en blanco de esta manera. Confirmado trabajar con \ <tab> también. ¡.htaccess nunca se habrá visto tan bien!
MaxPRafferty

1
¡Eh, incluso funciona para romper la expresión regular! @BazzaDP, es posible que desee dejar caer esta respuesta en la pregunta nginx que mencioné también, también podría funcionar allí.
MaxPRafferty

5

Sí, la barra invertida funciona como una continuación de línea . Esto está oculto en la documentación de Apache 2.4 en [ https://httpd.apache.org/docs/2.4/configuring.html#page-header]

Reglas importantes:

  1. El espacio en blanco dentro de una línea está bien, es decir. cualquier cantidad de pestañas y espacios;
  2. El último carácter en todas las líneas excepto la última debe ser una barra invertida; <
  3. La línea final no debe terminar con una barra diagonal inversa;
  4. El carácter de comentario de Apache (#) no se puede usar para comentar una línea.

Si no se obedecen estas reglas, el servidor responderá con un error 500.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.