仅允许来自域的请求并阻止其他来源

2023-12-01

我想允许某些路由仅响应我的前端网站发出的请求,这意味着出于安全原因阻止其他来源(例如邮递员)并仅允许来自前端域的请求。

是否可以?

例如,我有一个网页来检查链接的动态值并验证链接上的令牌是否在数据库中,我可以考虑添加验证码,这样机器人就无法检查所有可能的组合,但这不是 100%安全的。


Laravel API 节流

如果您的主要问题是机器人获取所有组合,那么节流中间件除了使用验证码之外,还会帮助您实现这一点。

默认情况下,您的所有 API 路由(在routes/api.php) 每个 IP 每分钟最多允许 60 个请求。您可以根据自己的需要修改此金额app/Http/Kernel.php通过更改文件throttle:api部分:

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

将其更改为throttle:30:1例如,这意味着您将允许每个 ip 每分钟 30 个请求。

如果您只想限制 api 上的某些路由,则可以在其他地方使用中间件:

Route::get('my-method', MyController::class)->middleware('throttle:30:1');

创建一个限制主机的中间件

如果您想按域精确限制,您正在寻找的可能是自定义中间件。中间件允许您检查各种请求属性(包括通过$request->getHost())并阻止任何控制器或方法。

虽然 Laravel 默认TrustHosts中间件提供全局主机验证,您可以为特定路径创建自己的自定义中间件,如下所示:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class LocalOnly
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if($request->getHost() != 'localhost')
        {
            return response('', 400);
        }
        
        return $next($request);
    }
}

注意:如果您要创建新的中间件,则需要注册它们。 Laravel 有自己的指南here.

在此示例中,当在任何路由上使用时,Laravel 将拒绝除localhost(所以即使127.0.0.1会被拒绝)

就我个人而言,我不建议这样做,因为内置节流是一个更优雅的解决方案,但如果您确实需要这样做,就这样做吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅允许来自域的请求并阻止其他来源 的相关文章

随机推荐

  • 错误:“struct List”需要模板参数

    我正在尝试为 List 类创建自己的模板作为学习练习 不过 我在模板语法方面遇到了一些问题 现在收到以下错误消息 main cpp Line 8 instantiated from here error template argument
  • 对于 >2 个类别的结果,插入符训练方法不起作用(所有准确性结果都有问题)

    嗨 我知道之前有人问过类似的问题 但还没有明确的答案 或者我尝试了他们的解决方案但没有成功 使用 GBM 时出现插入符错误 但并非没有插入符 插入符训练方法抱怨有问题 所有 RMSE 指标值均缺失 我尝试使用插入符训练方法来预测分类结果 下
  • R.java自动生成文件

    在 android 2 1 和 2 2 中 R java 文件是自动生成的 但在2 0平台中我们必须构建R java文件 任何人都知道如何从程序生成 R java 文件 使用 clean 并在 eclipse 中构建 每次构建 androi
  • 即使设置了内容大小,UIScrollView 也不会滚动

    我的 UIScrollView 是一个约 4500px 的水平视图 用户需要水平滚动才能查看内容 我已将其设置如下 void viewDidLoad super viewDidLoad sview frame CGRectMake 0 0
  • 定点的 2 次幂近似

    目前 我正在使用一个小型查找表和线性插值 它非常快且足够准确 最大误差小于 0 001 然而我想知道是否有一个更快的近似值 由于指数的整数部分可以通过位移位来提取和计算 因此近似值只需在 1 1 范围内工作 我试图找到切比雪夫多项式 但对于
  • Msys2:两个 python 安装中的 readline

    我将编辑放在最上面 因此读者不需要找到当前状态 这是与中提到的两个 python 安装相关的特定问题Msys2 维护两个 python 安装 pacman Sl grep python grep installed mingw64 ming
  • Android Eclipse - 移动项目导致所有 R 引用错误

    我通过右键单击项目 gt 重构 gt 移动将我的项目移动到 Eclipse 上 这导致 起初 项目名称旁边显示一个感叹号 所以我重新启动了Eclipse 这删除了感叹号 但现在我的整个活动文件的 R 引用都有错误 我试过 删除 R java
  • JPA/hibernate大集合

    在具有两种类型实体 父实体和子实体 的场景中 家长 OneToMany 集合子项 默认情况下对子集合进行延迟加载 这种模式对于少数儿童来说效果很好 但如果儿童数量变得非常多 这似乎是不可持续的 因此 对于我认为子级数量会非常大的情况 我会使
  • C# Regex.Replace 匹配相同数量的字符

    我想知道如何将未知数量的等号 不少于 2 个 的正则表达式匹配替换为相同数量的下划线 到目前为止我得到了这个 text Regex Replace text 2 我应该使用什么作为第三个参数 编辑 最好是与所有语言兼容的正则表达式解决方案
  • 在 C# 中从 FLV 流中提取音频

    我想从 C 中的 FLV 流中提取音频流 我在谷歌上搜索 发现FLV提取 但它仅支持从 FLV 文件中提取 而不支持从流中提取 我怎样才能做到这一点 我没有找到任何东西 所以我必须自己写 它速度非常快 而且效果很好 这是代码 protect
  • 如何根据媒体大小显示不同的视频?

    我打算在网页上运行背景视频 我有不同的移动视频文件和桌面视频文件 我
  • JEdi​​torPane 超链接 swing html

    我很难让超链接在 JEditorPane 中工作 有人可以告诉我我在这里做错了什么吗 我希望能够单击链接和浏览器来打开该页面 提前致谢 D bottomText setText a href Yahoo a bottomText setEd
  • 无法从 gradle 构建脚本查询数据库

    我正在尝试从 gradle 脚本任务中查询数据库 我从一个 groovy 脚本开始来验证代码 import groovy sql Sql this class classLoader rootLoader addURL new URL fi
  • 在 Bat 或 VBS 中创建快捷方式

    我一直在努力为我的程序 批处理文件创建快捷方式 我想批量执行此操作 创建一个 VBS 文件来执行此操作 因为 至少我认为 批量无法创建快捷方式 但因为我不是at all熟悉VBS编码我根本不知道如何做 但我知道我想要怎样 我正在寻找一个可以
  • 在 Xamarin iOS 中的单页中强制横向模式?

    我使用依赖服务强制 Android 和 iOS 中的单个页面横向显示 这是针对 Android 的 public class OrientationService IOrientationService public void Landsc
  • 如何为Android创建图书应用程序?

    我想使用 android studio 构建一个简单的 Android 图书应用程序 其中包含 100 页纯文本内容 要输入的第一个活动 2 个用于导航到下一页和上一页的按钮以及页码指示器 此外 当单击页面指示器时 会弹出一个窗口用于输入特
  • C++ 如何在 Boost Global Logger 上设置严重性过滤器

    我已经尝试了几天来创建一个 Boost Global Logger 以便在整个应用程序中使用但我似乎无法获得全局记录器中设置的严重级别 重要的 请看下面安德烈的答案 它被标记为步骤 a 和 b 但我仍然没有得到正确的答案 直接来自 Boos
  • 如何将 KeyCode 翻译为在 Keys.SendKey 上工作

    有没有一种方法可以以这种方式翻译 KeyCode 如果我在 Keys Sendkey 中使用它 它就会起作用 private void Manager KeyDown object sender KeyEventArgs e Keys Se
  • 黑莓分辨率

    黑莓手机有分辨率680x800的模拟器吗 我搜索了很多 但我无法得到具体的结果 我下载 Simulaors 的网站不提供分辨率信息 请帮我 提前致谢 我不相信有具有这种分辨率的黑莓设备 以下是一些传统 BB 设备的列表 http suppo
  • 仅允许来自域的请求并阻止其他来源

    我想允许某些路由仅响应我的前端网站发出的请求 这意味着出于安全原因阻止其他来源 例如邮递员 并仅允许来自前端域的请求 是否可以 例如 我有一个网页来检查链接的动态值并验证链接上的令牌是否在数据库中 我可以考虑添加验证码 这样机器人就无法检查