You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中防止URL地址篡改,限制非法ID访问

在Laravel中限制Post ID只能访问指定值的实现方案

嘿,这个需求其实不难搞定,我给你整理了几个靠谱的实现方式,你可以根据自己的场景灵活选择:

方案1:控制器方法内直接校验

这是最直接的方式,适合只需要在单个控制器方法里做限制的场景。在你的PostController的show方法里,先判断传入的ID是否为指定的11,不符合的话直接跳转或者返回禁止访问:

public function show($id)
{
    // 校验ID是否为允许的11
    if ((int)$id !== 11) {
        // 方式1:跳转到默认页面(比如首页)
        return redirect()->route('home');
        
        // 方式2:直接返回403禁止访问页面
        // abort(403, '你无权访问该内容');
    }

    // 正常获取并展示ID为11的文章
    $post = \App\Models\Post::findOrFail(11);
    return view('posts.show', compact('post'));
}

方案2:路由层面做限制

如果你的需求是只有/posts/11这个URL能正常访问,其他/posts/{id}都要被拦截,那可以直接在路由里配置:

// 首先定义允许访问的固定路由
Route::get('/posts/11', [\App\Http\Controllers\PostController::class, 'showDefault'])->name('posts.default');

// 然后捕获所有其他/posts/{id}的请求,直接处理
Route::get('/posts/{id}', function () {
    // 跳转到默认页面或者返回403
    return redirect()->route('posts.default');
    // abort(403);
});

对应的控制器方法可以简化成:

public function showDefault()
{
    $post = \App\Models\Post::findOrFail(11);
    return view('posts.show', compact('post'));
}

方案3:使用中间件(适合多路由复用)

如果多个路由都需要类似的ID限制,或者你想把校验逻辑抽离出来,用中间件是最好的选择:

步骤1:创建中间件

执行Artisan命令生成中间件:

php artisan make:middleware RestrictPostId

步骤2:编写中间件逻辑

打开app/Http/Middleware/RestrictPostId.php,修改handle方法:

public function handle(Request $request, Closure $next)
{
    // 获取路由参数里的ID
    $postId = $request->route('id');
    
    // 校验是否为允许的ID
    if ((int)$postId !== 11) {
        // 跳转或返回403
        return redirect()->route('home');
        // abort(403, '访问被禁止');
    }

    return $next($request);
}

步骤3:注册中间件

打开app/Http/Kernel.php,在$routeMiddleware数组里添加中间件:

protected $routeMiddleware = [
    // 其他已有的中间件...
    'restrict.post.id' => \App\Http\Middleware\RestrictPostId::class,
];

步骤4:在路由中使用中间件

给需要限制的路由加上这个中间件:

Route::get('/posts/{id}', [\App\Http\Controllers\PostController::class, 'show'])->middleware('restrict.post.id');

这样只要访问的ID不是11,就会被中间件拦截处理啦~


内容的提问来源于stack exchange,提问作者Copain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:16:28