Laravel 安全性,七種開發人員常犯的錯誤

閱讀時間約 4 分鐘

待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。

Laravel Security: Top 7 Mistakes Developers Make


XSS攻擊

在Laravel 裡主要通過Blade模板引擎和ORM 來處理用戶的輸入數據,以減少XSS的風險,而正常的情況下,blade接受一個Controller傳遞一個包含HTML到view時,blade會自動替我們轉譯這些東西,確保用戶輸入的內容不會當作原始HTML來呈現。

首先我們先建立一個Controller 並定義一個output 為html的格式

raw-image

當我們使用<p>{{ $userInput }}</p> 來進行轉譯時,可以看到如下畫面


raw-image

而如果想正確使用HTML呈現方式根據文檔說明,我們可以使用{!! $name !!} 來處理,而在這個方式下,就容易會遇到XSS攻擊,要格外小心。

raw-image

最後結果就會長成這個樣子

raw-image
raw-image

而當我們使用{!! $userInput !!}這個方式呈現,那當你取得資料未做處理時,而傳送一個script那就容易遇到XSS攻擊,例如下列程式碼,應該避免這樣子的寫法。

raw-image
raw-image

如果將{!! $userInput !!}改為{{ $userInput }},會長成什麼樣子呢?結果如下:最呈現為純文本的方式,而不是執行其中的script

raw-image

避免直接使用$request->all()

在 Laravel 中,request->all() 用於取得請求中的所有輸入數據,包括查詢字串、表單資料、檔案等。 雖然在某些情況下這樣的用法是方便的,但有一些潛在的安全風險,特別是在處理使用者提交的資料時,如果使用者提交了不受信任的數據,可能會引入安全漏洞,如 SQL 注入、XSS 攻擊等。

應使用驗證器來驗證和過濾使用者輸入或僅取得所需的字段,例如...

$request->validated();
$request->only();
$request->except();


File Uploads: Client Data

根據影片講到,如果取得上傳的檔案時,避免使用getClientOriginalNamegetClientOriginalExtension方法,因為這是被認為是不安全的,因為檔案名稱和副檔名可能會被惡意使用者篡改。

raw-image

文檔建議改用hashName() extension() 來取得給定檔案上傳的名稱和副檔名


$file = $request->file('avatar'); 
$name = $file->hashName(); // Generate a unique, random name...
$extension = $file->extension(); // Determine the file's extension based on the file's MIME type...


避免使用GET method 來更新你的資料

在Laravel 中預設啟用 CSRF 保護,並在每個表單中產生 CSRF 令牌。 這個令牌用於驗證表單提交的請求是否合法。 你可以在 Blade 模板中使用 @CSRF指令產生 CSRF 令牌,而根據文檔說明如下,這些方法裡面並不包含GET,故應避免使用GET method 來更新你的資料

Anytime you define a "POST", "PUT", "PATCH", or "DELETE" HTML form in your application, you should include a hidden CSRF _token field in the form so that the CSRF protection middleware can validate the request.


而影片另外介紹一個Laravel Rate Limiting這個功能,是可以用於防止惡意使用者或自動化腳本濫用某些資源或服務,避免被DDOS攻擊

Rate Limiting應該會再花另一篇介紹這個好用的東C,以上筆記是我自己認為比較容易忘記的部分進行整理,內容還有講解到.env的暴露跟debug在正式環境應該要關起來,這應該是要熟記到不行了,就沒在整理出來~一起進步~


14會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
發表第一個留言支持創作者!
DDDDD的沙龍 的其他內容
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
最近看到一些網路教學AWS S3可以部署靜態網頁,就想說那不如試試看將local swagger部署上去,之後還可以透過github action 自動部署swagger到s3上,於是花點時間看個影片並搭配chatgpt來實現
在專案開發的時候,專案架構搭建時團隊就會設定 php code style 檢查,避免整個開發團隊大家走出自己的風格,尤其是兩格空白還是四格空白,總是會有不同意見,這時候定義出團隊code style,並透過配置Github Action CI(Continuous Integration)
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
最近看到一些網路教學AWS S3可以部署靜態網頁,就想說那不如試試看將local swagger部署上去,之後還可以透過github action 自動部署swagger到s3上,於是花點時間看個影片並搭配chatgpt來實現
在專案開發的時候,專案架構搭建時團隊就會設定 php code style 檢查,避免整個開發團隊大家走出自己的風格,尤其是兩格空白還是四格空白,總是會有不同意見,這時候定義出團隊code style,並透過配置Github Action CI(Continuous Integration)
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
你可能也想看
Google News 追蹤
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Thumbnail
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
Thumbnail
在Laravel的MVC架構中,視圖(View)是呈現資料給使用者的關鍵部分。本篇深入探討了視圖的基本概念、建立與管理、與資料的互動方式,以及Blade模板引擎的應用。Blade提供了一套強大的工具,使動態視圖建立更為高效。
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
本文開始前,對於已經熟悉Laravel框架的您來說,這篇文章可能涵蓋了一些您已知的基本概念。然而,對於那些剛踏入Laravel世界的初學者,這篇指南將為您提供一個基礎概念,幫助您更好地理解這個強大的框架。 簡介 Laravel是當今最受歡迎的PHP框架之一,它使用MVC(Model-View
Thumbnail
本文使用網站的 FB 登入做示範 採用 Laravel 8 + Socialite 5 使用 Session 記錄狀態 不同版本可能會有些許語法及方法上的差異,請自行調整 前言 最近因為碰到需要實作 OAuth 第三方登入的需求,只好把之前隨便看看的東西撿回來研究並實作。不過我找到多數現存的中文文章
Thumbnail
續上篇,把程式碼改成這樣,model加上關聯,就可以從article去query comments了。 L27表示從article table中primary key = 1的文章去找所有留言。 L27的$articles變數output如下: L12這個method: comments(),
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
Thumbnail
本文模擬user註冊的情境來簡單演示,在Laravel中如何透過ajax來存取資料,以post request為例。 前端透過post把user資料送到controller中,並且透過model把資料塞進DB,最後回傳json response。 完整source cod
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Thumbnail
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
Thumbnail
在Laravel的MVC架構中,視圖(View)是呈現資料給使用者的關鍵部分。本篇深入探討了視圖的基本概念、建立與管理、與資料的互動方式,以及Blade模板引擎的應用。Blade提供了一套強大的工具,使動態視圖建立更為高效。
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
本文開始前,對於已經熟悉Laravel框架的您來說,這篇文章可能涵蓋了一些您已知的基本概念。然而,對於那些剛踏入Laravel世界的初學者,這篇指南將為您提供一個基礎概念,幫助您更好地理解這個強大的框架。 簡介 Laravel是當今最受歡迎的PHP框架之一,它使用MVC(Model-View
Thumbnail
本文使用網站的 FB 登入做示範 採用 Laravel 8 + Socialite 5 使用 Session 記錄狀態 不同版本可能會有些許語法及方法上的差異,請自行調整 前言 最近因為碰到需要實作 OAuth 第三方登入的需求,只好把之前隨便看看的東西撿回來研究並實作。不過我找到多數現存的中文文章
Thumbnail
續上篇,把程式碼改成這樣,model加上關聯,就可以從article去query comments了。 L27表示從article table中primary key = 1的文章去找所有留言。 L27的$articles變數output如下: L12這個method: comments(),
Thumbnail
Laravel本身是MVC架構的Framework,但隨著專案越來越龐大,若不把系統架構分工再切細一點,可能會導致日後維護的困難。 例如可能會很常發生controller要與model溝通拿資料,又要處理商業邏輯,就會導致controller越來越肥,因此本文要介紹的是....
Thumbnail
本文模擬user註冊的情境來簡單演示,在Laravel中如何透過ajax來存取資料,以post request為例。 前端透過post把user資料送到controller中,並且透過model把資料塞進DB,最後回傳json response。 完整source cod
Thumbnail
Laravel Framework version: 8.12.3 本範例做了兩個,一個是進到首頁顯示hello world!,另一個是進到article頁面時,從資料庫把文章抓出來顯示。 ...