| #pragma once |
| |
| #include <crow/http_request.h> |
| #include <crow/http_response.h> |
| |
| namespace crow { |
| static const std::string strict_transport_security_key = |
| "Strict-Transport-Security"; |
| static const std::string strict_transport_security_value = |
| "max-age=31536000; includeSubdomains; preload"; |
| |
| static const std::string ua_compatability_key = "X-UA-Compatible"; |
| static const std::string ua_compatability_value = "IE=11"; |
| |
| static const std::string xframe_key = "X-Frame-Options"; |
| static const std::string xframe_value = "DENY"; |
| |
| static const std::string xss_key = "X-XSS-Protection"; |
| static const std::string xss_value = "1; mode=block"; |
| |
| static const std::string content_security_key = "X-Content-Security-Policy"; |
| static const std::string content_security_value = "default-src 'self'"; |
| |
| |
| struct SecurityHeadersMiddleware { |
| struct context {}; |
| |
| void before_handle(crow::request& req, |
| response& res, |
| context& ctx) {} |
| |
| void after_handle(request& /*req*/, |
| response& res, |
| context& ctx) { |
| /* |
| TODO(ed) these should really check content types. for example, |
| X-UA-Compatible header doesn't make sense when retrieving a JSON or |
| javascript file. It doesn't hurt anything, it's just ugly. |
| */ |
| res.add_header(strict_transport_security_key, |
| strict_transport_security_value); |
| res.add_header(ua_compatability_key, ua_compatability_value); |
| res.add_header(xframe_key, xframe_value); |
| res.add_header(xss_key, xss_value); |
| res.add_header(content_security_key, content_security_value); |
| } |
| }; |
| } |