【问题标题】:nginx - restrict direct URL access to https but can be redirected from httpnginx - 限制对 https 的直接 URL 访问,但可以从 http 重定向
【发布时间】:2015-02-18 22:58:32
【问题描述】:


正在寻找类似的问题,但找不到合适的解决方案。

在 nginx 网络服务器上,我的网站在 443 上侦听,我不想从 url 访问它(如果我输入 https://my.server/foo,给出 403),但只有从 80 端口重定向才可以接受, 正确登录的地方。

我阅读了有关 valid_referers 并尝试过:

valid_referers none blocked server_names
        localhost ip.of.server;
        if ($invalid_referer) {
            return 403;
        }

valid_referers server_names
        localhost ip.of.server;
        if ($invalid_referer) {
            return 403;
        }

因为我不确定什么是正确的语法,但一切都被完全忽略了。

我做错了什么,这是解决这个问题的好方法吗?

谢谢, 米尔科

编辑: 解决方案是在重写之前放置 valid_referers: 位置 ~ ^/([a-zA-Z0-9=\?]+)$ {

    valid_referers server_names http://ip.of.ser.ver;
    if ($invalid_referer) {
        return 403;
    }

    rewrite ^/(.*)$ / break;
}

【问题讨论】:

  • 你想要一些奇怪的东西。在 http 上登录并重定向到 https 与您应该做的完全相反。
  • 好的,谢谢提示,我可以尝试在它们之间切换,然后我应该如何限制直接 http url 访问?

标签: security http nginx https


【解决方案1】:

这个语法应该可以工作:

valid_referers server_names http://your.domain;
if ($invalid_referer) {
    return 403;
}

但是你想用这个来完成什么? referer 标头很容易注入到请求中。如果这是一种安全措施,那显然是一种非常不安全的措施。

【讨论】:

  • 我读到refer header很容易伪造,但如果它会阻止99%的人直接从url访问,这不是问题。问题是这段代码仍然被忽略,或者我的浏览器以某种方式缓存......我仍然可以直接从 url 访问并在登录后从 php 重定向
  • 应该可以。检查浏览器的网络控制台,查看浏览器是否在请求标头中发送Referer标头。
  • 它现在可以工作了,我在referer检查之前有一个重写规则。当我切换它时,现在可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2011-03-29
  • 2018-01-05
相关资源
最近更新 更多