【问题标题】:How to block access to a set of url patterns by IP?如何通过 IP 阻止对一组 url 模式的访问?
【发布时间】:2016-07-20 13:32:16
【问题描述】:

我一直在尝试阻止对 /admin/admin/{anything} 的访问,其中 /admin 不是 silverstripe 中的物理子目录,除了一组有限的 IP 地址,并提出了以下 .htaccess 文件部分大部分都有效。

<IfModule mod_rewrite.c>
  SetEnv HTTP_MOD_REWRITE On
  RewriteEngine On
  RewriteBase '/'

  RewriteCond %{REQUEST_URI} ^(.*)?(admin/(.*)|admin)$
  RewriteCond %{REMOTE_ADDR} !^(127\.0\.0\.1|216\.58\.208\.36)$
  RewriteRule ^(.*)$ - [R=403,L]

</IfModule>

但是有人向我指出,这不会阻止未重写的访问 framework/main.php?url=adminframework/main.php?url=admin/{anything}

除此之外,Silverstripe 还可以通过不支持 .htaccess 的 Nginx 提供服务。

如何更新这个 .htaccess 部分以阻止非重写版本,以及如何在 nginx 中做同样的事情?

【问题讨论】:

  • 我建议不要在同一个线程中问 2 个不同的问题。 nginx 的规则将与 mod_rewrite 完全不同。坚持mod_rewrite 这条规则,一旦解决了,就问一个新的nginx

标签: apache .htaccess nginx silverstripe


【解决方案1】:

Hailwood,有几个模块涉及到这一点。可能是一个很好的起点:

https://github.com/silverstripe-labs/silverstripe-securityextras

https://github.com/prij/silverstripe-iprestrictedpage

【讨论】:

  • 嘿 muskie9,为模块干杯。不幸的是,他们需要启动 SS 来进行 IP 检查。我希望在 SS 知道它被请求之前做到这一点。
  • @muskie9,只有链接的答案可能会被删除,那些应该是 cmets。答案应包含一些相关内容。
  • @Hailwood,出于好奇,你为什么要在 SS 启动之前这样做?在 SilverStripe 中进行此处理可能会在处理过程中占用更多系统资源,但它无需根据您是运行 Apache 还是 Nginx 设置来实施不同的解决方案。
  • @Turnerj 这是一个很好的观点。称它为过早优化并在SS中实现它?
  • @Hailwood,是的,我认为是的。除非您提到您的网站有大量流量试图访问管理页面,从而导致整个网站出现性能问题,否则您可以从 SilverStripe 中获得更多收益。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多