【问题标题】:Trying to tidy up .htaccess and remove hard-coding of domain name尝试整理 .htaccess 并删除域名的硬编码
【发布时间】:2014-05-03 10:01:45
【问题描述】:

我在 .htaccess 文件中设置了以下配置。

除了硬编码域名(domain.com),我可以使用当前请求的域并防止域名硬编码吗?

另外,这样安全吗?硬编码当然可以保证正确的域,但我正在尝试考虑“获取当前域名”方法是否会导致其他问题(尤其是下面的前两个示例)。

# Allow cross-domain requests
#
SetEnvIf Origin "^http(s)?://(.+\.)?(domain\.com)$" origin_is=$0
Header add Access-Control-Allow-Origin %{origin_is}e env=origin_is
Header add Access-Control-Allow-Credentials: true

# CSP
#
Header set Content-Security-Policy "default-src 'none'; connect-src http://domain.com https://domain.com;"

# Set domain name as a variable
#
RewriteRule .* - [E=domain_name:domain.com] 

# Redirect non-secure (HTTP) traffic to secure (HTTPS)
#
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteRule ^(.*)$ https://%{ENV:domain_name}/$1 [R=301,L]

【问题讨论】:

    标签: apache .htaccess mod-rewrite apache2


    【解决方案1】:

    您可以只使用 Apache 已填充的 %{HTTP_HOST} env 变量。

    RewriteCond %{ENV:HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    

    【讨论】:

    • 谢谢。这安全吗?可以依赖 Apache HTTP_HOST 变量吗?可以被第三者操纵吗?
    • 不,它不能被操纵。想想看.. 如果 HTTP_HOST 无效,它们甚至不会访问您的 Web 服务器
    • 感谢您的帮助,这回答了最后一部分,但我认为在设置 Content-Security-Policy 时无法使用变量。我认为这可能是不可能的,它必须是硬编码的。
    • 是的,%{HTTP_HOST} 可以在mod_rewrite 中使用,也可能在mod_setenv 中使用
    • 好的,谢谢。此外,我需要保证该值不包括其中包含的“www”部分。 %{SERVER_NAME} 会更好地用于此(只要我将虚拟主机中的 SERVER_NAME 设置为“domain.com”)。那没有“www”部分。 SERVER_NAME 是否合适且安全?
    猜你喜欢
    • 2016-02-21
    • 2020-03-27
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多