iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Modern Web

Laravel實作 —系列 第 13

[Day 13] Laravel實作 -- 牛頭馬面帶我參觀地獄的防火牆

  • 分享至 

  • xImage
  •  

昨天我們先使用了controller中的index和create,那我們今天要進到controller中看看,在開始存資料之前我們先想想一個網頁的架構,要是每次進到一個頁面都要登錄,那是不是很麻煩?要是我只是想要逛逛活動還沒有這麼急著想要報名,那我還要登錄也太麻煩了,所以先讓我們在controller中加入一個__construct()的function。

<?php

namespace App\Http\Controllers;

use App\Models\Prefer;
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    /**
     * 設定哪項功能不需登錄即可查看
     */
    public function __construct(){
        $this->middleware('auth')->except(methods:['index', 'show']);
    }
    
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $articles = Article::with('user')->orderBy('start_time', 'desc')->paginate(10);
        return view('articles.index', ['articles' => $articles]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('articles.create');
    }

}

$this->middleware('auth')->except(methods:['index', 'show']);這個的想法和之前一樣我們用except告訴他我不要這些,但是這邊是告訴laravel說之後的東西我不要經過middleware,這樣就我們在進到網頁時我們所看到的東西就不需要登錄了,終於比較像普通的網頁了。

接著我們回到我們的blade中看看,在<form action = "{{ route('articles.store') }}" method = "post">下,有一個長得和別人很不一樣的@csrf,這是甚麼呢?

  • csrf(Cross-site request forgery)
    他的中文是跨站請求偽造,那他是甚麼呢?我們把他的名字拆開來看就知道他所有的想法了:跨站、請求偽造。
    請求偽造就是 Hacker 用帶著你 cookie 的 Request 送給 web server ,就像是有人帶著有你的資料的訊息直接塞進去server中。
    而跨站又是甚麼呢?跨站就是 Hacker 他將檔案放進 server 時,你卻完全不知道這件事,但是 web server 絲毫不懷疑 cookie 沒有再進行確認或以其他方式驗證,所以我們只能確定這個請求是來自某一個user,卻無法確定是否是這個user他自願發出的。

想要知道更加清楚的介紹可以到https://tech-blog.cymetrics.io/posts/jo/zerobased-cross-site-request-forgery/ 去看看。

而laravel提供了這一個簡單的token@csrf,讓web server每一次都去確認是否這個請求來自於你個人,讓你輕鬆地躲過csrf的攻擊,也是你網頁的資安有更多一層的防護。

有了@csrf,laravel卻還是為你的資安擔心,所以他還有另外一個小小動作去保護你的資料,那就是大量儲存。他將這個儲存鎖起來,那麼這樣 Hacker 放進來的資料就會因為無法存取。

所以我們要先到app\Models\Article.php去更改我們的大量填寫。

    protected $fillable = [
	'title',
	'content',
	'start_time',
	'end_time',
	'summary'
	];

這個表中要填入之後要存取的資料名稱,若是現在沒有寫進$fillable元件內容設定,之後會無法將取得的資料放入database。

那我們今天就先到這裡,地獄的防火牆應該是防外面吧!讓今天摩拳擦掌想要寫程式的人可能會有點失望,但是這些觀念也是非常重要的,不能輕易跳過。那我們明天開始寫store,真正將我們得資料放入資料庫,明天再祝你們中秋節快樂,今天先祝各位老師以及參加鐵人賽的各位夥伴教師節快樂。


上一篇
[Day 12] Laravel實作 -- 黑白無常帶我們地獄觀光—index和create篇
下一篇
[Day 14] Laravel實作 -- 餵地獄三頭犬資料不知道會不會吐出來
系列文
Laravel實作 —30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言