marshmallow/ip-access

Marshmallow - Laravel IP 访问

v2.3.0 2024-03-12 11:37 UTC

README

marshmallow.

Latest Version on Packagist Total Downloads License Stars Forks

这是一个IPv4 & IPv6的IP访问重定向包。其目的是允许或拒绝通过IP地址访问Laravel路由。它能够允许某些IP(IPv4或IPv6)访问默认文件或环境,并将未授权的IP或用户重定向到外部URL,同时让白名单IP有权访问整个网站或特殊环境。

安装

您可以通过composer安装此包

composer require marshmallow/ip-access

并发布服务提供者(以及配置)

php artisan vendor:publish --provider="Marshmallow\IpAccess\IpAccessServiceProvider"

这是已发布配置文件的内容

return [
    'enabled' => env('IPACCESS_ENABLED', true),

    'whitelist_env' => env('IPACCESS_ENV', 'production'),

    'whitelist' => [
        'range' => [
            '127.0.0.*',
        ],
        'list' => [
            '127.0.0.1',
        ]
    ],

    'redirect_to'      => env('IPACCESS_DENIED_URL', null),
    'response_status'  => env('IPACCESS_DENIED_STATUS', 403),
    'response_message' => env('IPACCESS_DENIED_MESSAGE', 'Access not Allowed'),
];

可选

以下是一些可选的.env变量设置

    # ENABLED
    IPACCESS_ENABLED=true

    # ENV THAT IS CHECKED BY IP e.g. staging
    IPACCESS_ENV=production

    # ADDIOTNAL IP LIST
    IPACCESS_WHITELIST="127.0.0.1,123.456.789.12"   # SEPERATED BY ,

    # URL TO REDIRECT TO:
    IPACCESS_DENIED_URL="https://marshmallow.dev"

    # IF URL NOT SET
    IPACCESS_DENIED_STATUS=403                      # REDIRECT STATUS
    IPACCESS_DENIED_MESSAGE="Not allowed"           # REDIRECT STATUS MESSAGE

禁用对路由和webhook的锁定

如果您正在测试被锁定的环境的webhook,您需要打开您的应用程序,以便webhook不会被阻止。您可以通过在配置数组的except中添加值来实现。以下是一些示例。

只打开一个路由

将URL添加到数组中,以打开它。如果此路由匹配,则包将允许请求通过。

'except' => [
    'webhook/*',
],

通过密钥打开

如果您想打开路由但需要请求有密钥,可以通过向except数组添加一些设置来实现。

通过头部信息

'except' => [
    'webhook/*' => [
        'secret' => [
            'source' => 'header',
            'key' => 'x-webhook-secret',
            'value' => 'TEST_SECRET_HEADER',
        ],
    ],
],

/** This request will be allowed by the config above. */
Http::withHeaders([
  "x-webhook-secret" => "TEST_SECRET_HEADER"
])->get("https://marshmallow.dev/webhook/is/open");

通过正文/查询字符串

'except' => [
    'webhook/*' => [
        'secret' => [
            'source' => 'body',
            'key' => 'secret',
            'value' => 'TEST_SECRET_BODY',
        ],
    ],
],

/** These requests will be allowed by the config above. */
Http::get("https://marshmallow.dev/webhook/is/open?secret=TEST_SECRET_BODY");
Http::get("https://marshmallow.dev/webhook/is/open", [
  "secret" => "TEST_SECRET_BODY"
]);
Http::post("https://marshmallow.dev/webhook/is/open", [
  "secret" => "TEST_SECRET_BODY"
]);

与Laravel Nova一起使用

如果您想使用Laravel Nova跟踪有权访问的IP地址,您需要按照以下步骤操作。

在NovaServiceProvider中添加对IP访问的检查

Gate::define('viewNova', function ($user) {
    return IpAccess::hasBackofficeAccess();
}

更新您的配置文件

config/ip-access.php中将use_nova设置为true。

return [
    'use_nova' => true,
];

运行迁移

您需要在更新配置文件后运行迁移,以便我们有存储IP地址所需的表。

php artisan migrate

发布Nova资源

最后一步是发布Nova资源,以便您可以在Laravel Nova安装中管理所有IP地址。

php artisan marshmallow:resource IpAccess IpAccess

卸载

一旦您的应用程序完成,并且您要将应用程序发布到生产环境供全世界查看,您就可以删除此包。您不再需要它,而且保持代码整洁总是好的做法。运行以下命令来卸载此包。此命令将删除config文件。删除nova resource、删除migration记录、删除ip_accesss数据库表,并从您的composer文件中删除包。您将需要自行审查并提交您在GIT仓库中的更改。

php artisan ip-access:uninstall

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞的更多信息,请参阅我们的安全策略

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件