iT邦幫忙

0

Laravel 文章博客,阻止用戶從網址列自行更改參數修改文章

大大們好!小弟想請教一下:任何意見感恩在先
我有一個 Laravel test.com 項目,用戶可以發表文章、修改文章...
資料庫的articale 表中 有 uid 字段 紀錄 articale的作者

我定義一個 resource 路由

Route::resource('articale', 'ArticaleController');

假設:
uid 1 用戶 有 articale 1、2、3
uid 2 用戶 有 articale 4、5、6
我在 ArticalController 的 edit 方法中 寫如下代碼

    public function edit(Request $request, Aticale $aticale)
    {
        $user = $request->user();
       
        if ($user->id == $articale->uid) {
            return view('user.articaleEdit', compact('articale', $articale));
        } else {
            return redirect('/')->with('flash_alert', '錯誤操作,拒絕訪問!');
        }
    }

用戶登入可以修改文章:

uid 1 用戶 若正常使用網頁鏈接打開文章都正常,若打開第1篇文章網址如這樣:

http://test.com/1/edit  // 參數1 代表 第1篇文章

問題是:

用戶若自己從網址列更改 參數為 2 或 3 文章內容會跟著變動,但除1、2、3 之外的任何參數都將變阻止,並導回首頁,(相同地 uid 2 用戶也只能修改自己的文章)

若我想要做到的是:

不允許 用戶從網址列自行更改參數

請教一下大大!我該怎麼做?

看更多先前的討論...收起先前的討論...
firecold iT邦新手 3 級 ‧ 2021-03-18 15:23:36 檢舉
這可能要問瀏覽器開發商
基本上你的做法就差不多了
或者要不用順序編碼
可以避免大部分狀況
DanSnow iT邦新手 1 級 ‧ 2021-03-18 15:31:20 檢舉
基本上不可能,去查一個叫 hashid 的東西,基本上你能做的就是用像 hashid 那樣的工具,把 id 變成使用者沒辦法輕易找到規律,只有你才能解讀的字串
咖咖拉 iT邦研究生 4 級 ‧ 2021-03-18 15:31:35 檢舉
不允許 用戶從網址列自行更改參數 <--不可能做到
不要接受GET的動作可更動資料就好了
所有資料庫CUD行為僅限於POST
謝謝各位前輩指導!
另請教一下 @DanSnow
hashid 和 slug 有一樣嗎?
DanSnow iT邦新手 1 級 ‧ 2021-03-18 16:22:54 檢舉
要看你 slug 怎麼設計,本質上其實不太一樣, hashid 是把數字變成看似無規則的文字,slug 一般是拿文章的標題來產生 id ,比如叫 Hello world ,那 slug 可能會變成 hello-world ,但假如有兩個人取了一樣的標題的話,另一個人就必須要換個名字,比如叫 hello-world-2 ,好處是人看的懂,壞處是有那個數字在那也沒好看到哪,但為了解決 id 重覆的問題這又是必要之惡,也有人的做法是,網站的前半部是 id 後面則是 slug ,如果再加上 hashid 那就會變的像 abc123-hello-world ,然後查詢資料庫時只拿 hashid 部份來查,怎樣網址比較好看就見仁見智了
@DanSnow 大大!謝謝您指導! 能否進一步指一下路: hashID 或 slug 的學習參考文章
DanSnow iT邦新手 1 級 ‧ 2021-03-18 17:28:44 檢舉
要麻煩你自己 Google 下,因為突然要我找,我也不知道啊
DanSnow iT邦新手 1 級 ‧ 2021-03-18 17:30:44 檢舉
對了,上面說的前半段 hashid 後半段 slug ,這麼做的話 slug 就沒有必要是唯一值了甚至是可有可無了,變成主要是讓網址看起來好看的東西
恩嗯!thanks a lot

尚未有邦友回答

立即登入回答