internetrix/silverstripe-controller-ip-restriction

限制 SilverStripe 控制器对特定 IP 地址的访问

1.0.1 2021-05-07 04:24 UTC

This package is not auto-updated.

Last update: 2024-09-21 16:06:10 UTC


README

此模块允许 SilverStripe 开发者根据用户的 IP 地址限制对任意定义的控制器访问。如果用户的 IP 地址不匹配提供的允许 IP 地址列表,则将拒绝特定控制器的请求。

可以通过环境变量或通过 SiteConfig 设置允许的 IP 地址。此模块的常见用途包括

  • 限制对 CMS 管理部分的访问
  • 限制对 dev/tasks 管理的访问。

需求

  • SilverStripe CMS ^4

安装与配置

  1. 通过 composer 安装模块
composer require internetrix/silverstripe-controller-ip-restriction
  1. 在配置中设置以下变量 Internetrix\CMSAdminIPRestriction\AllowedIPMiddleware
    • enabled: 将此设置为 true 以启用此模块的 AllowedIPMiddleware
    • restricted_controllers: 您想要通过 IP 地址限制的控制器列表

在以下示例中,我们限制了对 CMS 管理以及 /dev 控制器的访问。

Internetrix\CMSAdminIPRestriction\AllowedIPMiddleware:
  enabled: true
  restricted_controllers:
    - SilverStripe\Admin\AdminRootController
    - SilverStripe\Dev\DevelopmentAdmin
  1. .env 文件中定义允许的 IP 地址,使用 SS_ADMIN_ALLOWED_IPS 变量。对于多个 IP 地址,请使用逗号分隔的列表。
SS_ADMIN_ALLOWED_IPS='123.0.0.1,248.1.1.1'
  • 还可以通过 CMS 管理员通过 CMS SiteConfig 下的“允许 IP”选项卡设置其他允许的 IP 地址。只需创建一个包含精确 IP 地址的新记录,并为其添加相应的物理位置标签(用于审计目的)

绕过 IP 限制

  • 如果某个用户是管理员,并且将 CanBypassIPRestriction 数据库字段设置为 true,则他们可以绕过 IP 限制检查。可以在 CMS 中编辑成员时设置此字段,并且仅在用户仍然是 CMS 管理员时应用。

    重要:由于竞争条件,此功能需要用户先登录,以便可以检查用户的 CanBypassIPRestriction 值。如果 CMS 管理员或另一个控制器受到限制,用户必须首先通过非限制页面(例如,只有登录用户才能查看页面)登录到 SilverStripe,然后才能应用 IP 绕过。

故障排除

  • 如果在 .env 或通过 SiteConfig 未指定 IP 地址,则受限制的控制器将无法访问。

待办事项

  • 目前,IP 匹配基于精确匹配 IP 地址。范围、通配符和 CIDR 目前不受支持,将在未来包含在内。欢迎提交拉取请求!