On Thursday, December 14, 2017 at 10:24:10 PM UTC-8, torgeriedel wrote:
>
> Am 14.12.2017 um 21:03 schrieb Ryan Ollos:
>
>
>
> On Thu, Dec 14, 2017 at 9:41 AM, Torge Riedel <[email protected]> wrote:
>
>> Hi,
>>
>> I've set up a trac via https using latest stable trac (1.2.2).
>>
>> I've found a nice tool checking site configuration:
>> https://observatory.mozilla.org/
>>
>> Checking my trac installation I got a poor "D" rating.
>>
>> Following is the list of tests failed resulting in a negative score:
>>
>> Test Score Explanation
>> Content Security Policy -25 Content Security Policy (CSP)
>> header not implemented
>> Contribute.json -10 Contribute.json file cannot
>> be parsed
>> X-Content-Type-Options -5 X-Content-Type-Options header not
>> implemented
>> X-Frame-Options -20 X-Frame-Options (XFO) header
>> not implemented
>> X-XSS-Protection -10 X-XSS-Protection header not
>> implemented
>>
>> Since other sites hosted on my server get better ratings there must be a
>> chance to fix this in the code. Another way is to add such headers to the
>> apache config, but I'm not sure whether I am breaking something in trac and
>> it's less flexible.
>>
>> Is there a chance to improve the headers trac is sending? Can I help with
>> whatever is helpful?
>>
>> Regards
>> Torge
>>
>
> Some of all of this may be best addressed through your web server
> configuration. Are you running Apache?
>
> - Ryan
> --
> You received this message because you are subscribed to the Google Groups
> "Trac Development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/trac-dev.
> For more options, visit https://groups.google.com/d/optout.
>
> Yes, I am running apache. And I have full access to my server. Others
> might not have full access to the apache config and are able to add headers
> or mod_headers is not activated.
>
> That's why I think as much as possible of such headers should be sent by
> trac.
>
Any such headers need to be configurable, but we want to avoid
configuration option bloat. What we might be able to do is add an
[http-headers] configuration section to trac.ini. We could specify some
common configurations to the documentation.
Example configuration:
[http-headers]
X-Frame-Options = DENY
X-XSS-Protection = 1; mode=block
The option names as read by ConfigParser are case-insensitive, but I think
that may be okay as it looks like the HTTP headers are also
case-insensitive.
I've done a PoC patch against 1.2-stable, but I'll want to hear what Jun
has to say before suggesting this is the right solution, since he has much
more experience with web server internals and configuration.
diff --git a/trac/web/api.py b/trac/web/api.py
index b2e76f948..521cd59ab 100644
--- a/trac/web/api.py
+++ b/trac/web/api.py
@@ -686,6 +686,8 @@ class Request(object):
self.send_header('Content-Type', content_type + ';charset=utf-8')
if isinstance(content, basestring):
self.send_header('Content-Length', len(content))
+ for name, val in getattr(self, 'configurable_headers', []):
+ self.send_header(name, val)
self.end_headers()
if self.method != 'HEAD':
diff --git a/trac/web/main.py b/trac/web/main.py
index 56b493d38..1a54dce82 100644
--- a/trac/web/main.py
+++ b/trac/web/main.py
@@ -38,8 +38,9 @@ from genshi.output import DocType
from genshi.template import TemplateLoader
from trac import __version__ as TRAC_VERSION
-from trac.config import BoolOption, ChoiceOption, ConfigurationError, \
- ExtensionOption, Option, OrderedExtensionsOption
+from trac.config import (
+ BoolOption, ChoiceOption, ConfigSection, ConfigurationError,
+ ExtensionOption, Option, OrderedExtensionsOption)
from trac.core import *
from trac.env import open_environment
from trac.loader import get_plugin_info, match_plugins_to_frames
@@ -164,6 +165,10 @@ class RequestDispatcher(Component):
"""The header to use if `use_xsendfile` is enabled. If Nginx is
used,
set `X-Accel-Redirect`. (''since 1.0.6'')""")
+ configurable_headers = ConfigSection('http-headers', """
+ Headers to be added to the HTTP request.
+ """)
+
# Public API
def authenticate(self, req):
@@ -317,6 +322,7 @@ class RequestDispatcher(Component):
'tz': self._get_timezone,
'use_xsendfile': self._get_use_xsendfile,
'xsendfile_header': self._get_xsendfile_header,
+ 'configurable_headers': self._get_configurable_headers,
})
@lazy
@@ -426,6 +432,10 @@ class RequestDispatcher(Component):
header)
return None
+ def _get_configurable_headers(self, req):
+ for name, val in self.configurable_headers.options():
+ yield name, val
+
def _pre_process_request(self, req, chosen_handler):
for filter_ in self.filters:
chosen_handler = filter_.pre_process_request(req,
chosen_handler)
(pve) ~/Documents/Workspace/trac-dev/teo-rjollos.git$clear
(pve) ~/Documents/Workspace/trac-dev/teo-rjollos.git$git diff
diff --git a/trac/web/api.py b/trac/web/api.py
index b2e76f948..521cd59ab 100644
--- a/trac/web/api.py
+++ b/trac/web/api.py
@@ -686,6 +686,8 @@ class Request(object):
self.send_header('Content-Type', content_type + ';charset=utf-8')
if isinstance(content, basestring):
self.send_header('Content-Length', len(content))
+ for name, val in getattr(self, 'configurable_headers', []):
+ self.send_header(name, val)
self.end_headers()
if self.method != 'HEAD':
diff --git a/trac/web/main.py b/trac/web/main.py
index 56b493d38..8f66906e3 100644
--- a/trac/web/main.py
+++ b/trac/web/main.py
@@ -38,8 +38,9 @@ from genshi.output import DocType
from genshi.template import TemplateLoader
from trac import __version__ as TRAC_VERSION
-from trac.config import BoolOption, ChoiceOption, ConfigurationError, \
- ExtensionOption, Option, OrderedExtensionsOption
+from trac.config import (
+ BoolOption, ChoiceOption, ConfigSection, ConfigurationError,
+ ExtensionOption, Option, OrderedExtensionsOption)
from trac.core import *
from trac.env import open_environment
from trac.loader import get_plugin_info, match_plugins_to_frames
@@ -164,6 +165,10 @@ class RequestDispatcher(Component):
"""The header to use if `use_xsendfile` is enabled. If Nginx is
used,
set `X-Accel-Redirect`. (''since 1.0.6'')""")
+ configurable_headers = ConfigSection('http-headers', """
+ Headers to be added to the HTTP request. (''since 1.2.3'')
+ """)
+
# Public API
def authenticate(self, req):
@@ -317,6 +322,7 @@ class RequestDispatcher(Component):
'tz': self._get_timezone,
'use_xsendfile': self._get_use_xsendfile,
'xsendfile_header': self._get_xsendfile_header,
+ 'configurable_headers': self._get_configurable_headers,
})
@lazy
@@ -426,6 +432,10 @@ class RequestDispatcher(Component):
header)
return None
+ def _get_configurable_headers(self, req):
+ for name, val in self.configurable_headers.options():
+ yield name, val
+
def _pre_process_request(self, req, chosen_handler):
for filter_ in self.filters:
chosen_handler = filter_.pre_process_request(req,
chosen_handler)
- Ryan
--
You received this message because you are subscribed to the Google Groups "Trac
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/trac-dev.
For more options, visit https://groups.google.com/d/optout.