【问题标题】:How to protect laravel api route from outside GET request如何保护 laravel api 路由免受外部 GET 请求的影响
【发布时间】:2022-01-09 10:44:35
【问题描述】:

我正在使用 laravel 构建后端,然后使用 Vue 作为前端。使用 axios 通过 api 调用访问数据。现在我有这个相对简单的任务,但我似乎找不到合适的解决方案。我希望其中一条路线可供 Vue 组件轻松使用而无需登录,但我不希望该路线公开供任何人使用。我说的是 GET 请求,而不是带有 CSRF 令牌的 POST 请求。

让我添加一个示例,这是我的路线:

Route::get('MyFAQS',[\App\Http\Controllers\FaqController::class,'getQuestions']);

还有 vue js:

        axios.get('api/MyFAQS').
        then(response => {
            this.FAQ = response.data;
            console.log(this.FAQ);
        })
        .catch(error=>{
            console.log("can not get FAQ: " + error)
        })

在这种情况下,任何人都可以向https://mywebsite.com/api/MyFAQS 发出 GET 请求并在他的网站上使用我的数据,我该如何保护它?

【问题讨论】:

  • @Phil 不确定,我看到了 HTTP_REFERER,我试过了,效果很好,但我认为可以操纵它的推荐并将其发送回我的服务器
  • 没有任何其他形式的身份验证/授权,您就处于“尽力而为”的领域
  • JavaScript 是客户端代码。在没有身份验证的情况下,无法在允许客户端访问资源的同时“保护”资源。
  • 在没有某种身份验证的情况下接近保护路由的唯一方法是使用来自源的请求阻止。您可以设置后端代码以拒绝来自所需来源之外的来源(例如前端)的所有请求。这可以在 laravel 中使用中间件轻松完成。

标签: laravel vue.js security axios get


【解决方案1】:

API 令牌是其中一种方法。 试试https://laravel.com/docs/8.x/sanctum 要么 https://laravel.com/docs/8.x/passport

【讨论】:

  • “保护路由,以便所有传入请求都必须经过身份验证”。我不需要用户登录!
  • 没有用户的身份验证可以通过 laravel 护照客户端凭据授予完成
  • @SoneyeOluwasina 不幸的是,在 SPA 中保护客户端凭据是不可能的
猜你喜欢
  • 2022-01-09
  • 2012-12-20
  • 1970-01-01
  • 2021-06-02
  • 2015-12-20
  • 2016-09-24
  • 2022-12-14
  • 1970-01-01
  • 2016-01-17
相关资源
最近更新 更多