🪲 Một vài Tips giúp ứng dụng Laravel của bạn bảo mật hơn

🪲 Một vài Tips giúp ứng dụng Laravel của bạn bảo mật hơn

date
Feb 9, 2023
slug
mot-vai-tips-giup-ung-dung-laravel-cua-ban-bao-mat-hon
status
Published
tags
Chia sẻ
Sharing
Laravel
summary
Bảo mật luôn là vần đề quan trọng đối với bất cứ dự án nào. Dự án Laravel của bạn cũng không phải ngoại lệ. Bài viết này mình muôn chia sẻ một số tips hữu ích rất cơ bản giúp cho ứng dụng Laravel của bạn được an toàn hơn.
type
Post

Đầu tiên cập nhật các phiên bản mới nhất của Laravel sẽ tránh các rủi ro bảo mật

Các phiên bản mới hơn bao giờ cũng đi kèm các bản vá bảo mật mới nhất nếu có
Sử dụng các phiên bản mới giúp chúng ta được bảo vệ khỏi các nguy cơ tấn công có chủ đích dựa vào các lỗ hổng tồn tại ở các phiên bản cũ hơn.
Hãy đảm bảo bạn đang sử dụng các phiên bản vẫn còn được cấp phát vá lỗi.

Kiểm tra các Package mà bạn đang dùng, hãy nâng cấp nếu có thể

Package bạn sử dụng cũng sẽ tồn tại các vấn đề bảo mật khó lường trước, cách tốt nhất để đảm bảo chúng không hiện diện là dùng phiên bản mới hơn.

Đừng để lộ file .env

File .env chứa các thông tin nhạy cảm như Database, các secret key kết nôi dịch vụ bên thứ 3,..
Việc để lộ file env đồng nghĩa các bạn gọi mời những kẻ xấu tới đúng điểm để thực hiện các hành vi sai trái
Hãy thêm file này vào .gitignore
Chỉ khởi tạo file .env trực tiếp trên production, đảm bảo không ai có thông tin này ngoài bạn.

Luôn gen mới APP_KEY mỗi khi khởi tạo dự án

Nhiều dev hay mắc phải lỗi copy y nguyên env từ dự án trước sang dự án mới mà không quan tâm đến APP_KEY
Đoạn mã này nếu được sử dụng ở nhiều dự án khác nhau dẫn đến chúng có nguy cơ bị tấn công theo dây truyền
Nhớ rằng luôn gen lại APP_KEY mới nhé

Thiết lập mã hóa Payload cho Queue, Job

Mội khi bạn dispatch 1 job, payload của nó sẽ được lưu trong database, Redis, hay bất cứ nơi nào được thiết lập bởiQUEUE_DRIVER trong .env.
Payload có thể chứa các thông tin nhạy cảm mà bạn không muốn người khác tự do thấy.
Laravel cung cấp cho chúng ta Illuminate\Contracts\Queue\ShouldBeEncrypted Contract, nó sẽ tự động mã hóa payload. Để chắc chắn rằng không ai có thể giải mã được nếu không có APP_KEY được định nghĩa trong .env. APP_KEY này không để lộ, ngoài một số nhân sự được trao quyền.
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeEncrypted; class SomeJob implements ShouldQueue, ShouldBeEncrypted { // }

Luôn tắt Debug Bar, Debug Messages trên môi trường Production

Debug Bar thể hiện các thông số như Booting time, Application time render, Query log, Session state,… rất dễ dầng để kẻ tấn công có thể phân tích dự án của bạn
Debug Messages sẽ hiển thị toàn các lỗi Exception, lỗi Runtime,… quá tuyệt vời để phân tích và tìm giải pháp để nghịch ngợm.
Hãy thiết lập APP_DEBUG=false
APP_ENV=production APP_DEBUG=false
Thêm đoạn config dưới đây vào /config/app.php
'debug_blacklist' => [ '_COOKIE' => array_keys($_COOKIE), '_SERVER' => array_keys($_SERVER), '_ENV' => array_keys($_ENV), ],