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在正式環境應該要關起來,這應該是要熟記到不行了,就沒在整理出來~一起進步~


avatar-img
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
戴夫寇爾研究團隊發現PHP在Windows系統上存在遠端程式碼執行漏洞,影響多個PHP版本,包括XAMPP預設安裝環境。漏洞源於字元編碼轉換的問題,允許攻擊者在遠端伺服器上執行任意程式碼。建議使用者立即升級至最新PHP版本,或採取臨時緩解措施。
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
是的,身為前端工程師的基本功!還是需要時不時拿出來打磨一番! 很多大公司的切版與前端是分開的,但不能因為碰不到就不去理解,假如要系統性的調整樣式,那麼你就一定要懂基礎,就好像你要調整微前端的架構,總不能連包板工具的設定都不會吧! 回到正題,這系列文章每個禮拜三都會更新一題CSS Battle的題
Thumbnail
是的,身為前端工程師的基本功!還是需要時不時拿出來打磨一番! 很多大公司的切版與前端是分開的,但不能因為碰不到就不去理解,假如要系統性的調整樣式,那麼你就一定要懂基礎,就好像你要調整微前端的架構,總不能連包板工具的設定都不會吧! 回到正題,這系列文章每個禮拜三都會更新一題CSS Battle的題
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
CodeIgniter 3 和 Laravel 是兩種不同的 PHP 框架,各有其特點和適用場景。CodeIgniter 3 是一個輕量級框架,Laravel 是一個功能強大的現代 PHP 框架,同樣都有Models的它們有什麼樣的差別呢?
Thumbnail
介紹工作後幾個常見的小問題,包括寫 Log 的好習慣、本地印出錯誤或過程、PHPCS 工具、變數儲存於設定檔、避免魔術數字、程式碼靜態分析與動態分析。
Thumbnail
戴夫寇爾研究團隊發現PHP在Windows系統上存在遠端程式碼執行漏洞,影響多個PHP版本,包括XAMPP預設安裝環境。漏洞源於字元編碼轉換的問題,允許攻擊者在遠端伺服器上執行任意程式碼。建議使用者立即升級至最新PHP版本,或採取臨時緩解措施。
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
是的,身為前端工程師的基本功!還是需要時不時拿出來打磨一番! 很多大公司的切版與前端是分開的,但不能因為碰不到就不去理解,假如要系統性的調整樣式,那麼你就一定要懂基礎,就好像你要調整微前端的架構,總不能連包板工具的設定都不會吧! 回到正題,這系列文章每個禮拜三都會更新一題CSS Battle的題
Thumbnail
是的,身為前端工程師的基本功!還是需要時不時拿出來打磨一番! 很多大公司的切版與前端是分開的,但不能因為碰不到就不去理解,假如要系統性的調整樣式,那麼你就一定要懂基礎,就好像你要調整微前端的架構,總不能連包板工具的設定都不會吧! 回到正題,這系列文章每個禮拜三都會更新一題CSS Battle的題
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
Thumbnail
第一份正職工作 在iot公司擔任後端工程師,一上工就使用先前沒用過的php/laravel,也馬上負責公司產品的架構規劃,先前資料庫只有簡單記載使用者跟使用者的一些設定,很多地方有資料不一致的問題,產品內容還有很多實體的關係沒有被定義進資料庫都是這次改版我要做的事情。 改版納入公司、機器
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更