Laravel Framework cung cấp các tính năng bảo mật được tích hợp sẵn và có nghĩa là được bảo mật theo mặc định. Tuy nhiên, nó cũng cung cấp thêm tính linh hoạt cho các trường hợp sử dụng phức tạp. Điều này có nghĩa là các nhà phát triển không quen với hoạt động bên trong của Laravel có thể rơi vào bẫy của việc sử dụng các tính năng phức tạp theo cách không an toàn. Hướng dẫn này nhằm hướng dẫn các nhà phát triển tránh những cạm bẫy phổ biến và phát triển các ứng dụng Laravel một cách an toàn.
Bạn cũng có thể tham khảo Enlightn Security Documentation tài liệu này nêu bật các lỗ hổng phổ biến và các phương pháp hay về bảo mật các ứng dụng Laravel.
APP_DEBUG
biến môi trường của bạn thành false
:APP_DEBUG=false
key:generate
lệnh Artisan:php artisan key:generate
775
và các tệp không thực thi có mức quyền tối đa là 664
. Các tệp thực thi như Artisan hoặc tập lệnh triển khai phải được cung cấp mức quyền tối đa là 775
.cookie
cửa hàng phiên hoặc nếu bạn lưu trữ bất kỳ loại dữ liệu nào mà ứng dụng khách không thể đọc được hoặc giả mạo. Nói chung, điều này nên được bật trừ khi ứng dụng của bạn có một trường hợp sử dụng rất cụ thể yêu cầu tắt tính năng này. Để kích hoạt phần mềm trung gian này, chỉ cần thêm EncryptCookies
phần mềm trung gian vào web
nhóm phần mềm trung gian trong App\Http\Kernel
lớp của bạn :/** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, ... ], ... ];
HttpOnly
thuộc tính trên cookie phiên của bạn thông qua config/session.php
tệp của bạn , để cookie phiên của bạn không thể truy cập được từ Javascript:'http_only' => true,
domain
thuộc tính cookie thành null để chỉ có cùng nguồn gốc (không bao gồm miền phụ) mới có thể đặt cookie. Điều này có thể được định cấu hình trong config/session.php
tệp của bạn :'domain' => null,
SameSite
thuộc tính cookie của bạn thành lax
hoặc strict
trong config/session.php
tệp của bạn để hạn chế cookie của bạn trong ngữ cảnh của bên thứ nhất hoặc cùng một trang web:'same_site' => 'lax',
secure
tùy chọn cấu hình trong config/session.php
tệp của mình thành true
để bảo vệ khỏi các cuộc tấn công trung gian. Nếu ứng dụng của bạn có sự kết hợp giữa HTTP và HTTPS, thì bạn nên đặt giá trị này thành null
để thuộc tính an toàn được đặt tự động khi cung cấp các yêu cầu HTTPS:secure' => null,
config/session.php
tệp của bạn :'lifetime' => 15,
Bạn cũng có thể tham khảo Hướng dẫn bảo mật cookie để tìm hiểu thêm về bảo mật cookie và các thuộc tính cookie được đề cập ở trên.
Về cốt lõi, các cơ sở xác thực của Laravel được tạo thành từ các “guards” và “prociders”. Guards vệ xác định cách người dùng được xác thực cho mỗi yêu cầu. Providers xác định cách người dùng được truy xuất từ bộ nhớ liên tục của bạn.
Laravel cung cấp một bộ session
bảo vệ duy trì trạng thái bằng cách sử dụng lưu trữ phiên và cookie cũng như bộ token
phận bảo vệ cho các mã thông báo API.
Đối với Providers, Laravel giao hàng với eloquent
nhà cung cấp để truy xuất người dùng bằng Eloquent ORM và database
Providers để truy xuất người dùng bằng trình tạo truy vấn cơ sở dữ liệu.
Các bộ phận Guards và nhà cung cấp có thể được định cấu hình trong config/auth.php
tệp. Laravel cũng cung cấp khả năng xây dựng các guards and providers tùy chỉnh.
Laravel cung cấp nhiều bộ công cụ khởi động ứng dụng của bên thứ nhất bao gồm các tính năng xác thực được tích hợp sẵn:
Bạn nên sử dụng một trong những bộ công cụ khởi động này để đảm bảo xác thực mạnh mẽ và an toàn cho các ứng dụng Laravel của bạn.
Laravel cũng cung cấp các gói xác thực API sau:
Các bộ công cụ dành cho người mới bắt đầu như Fortify và Jetstream có hỗ trợ sẵn cho Sanctum.
Mass Assignment là một lỗ hổng phổ biến trong các ứng dụng web hiện đại sử dụng ORM như Eloquent ORM của Laravel.
Phép gán hàng loạt là một lỗ hổng trong đó mẫu ORM bị lạm dụng để sửa đổi các mục dữ liệu mà người dùng thường không được phép sửa đổi.
Hãy xem xét đoạn mã sau:
Route::any('/profile', function (Request $request) { $request->user()->forceFill($request->all())->save(); $user = $request->user()->fresh(); return response()->json(compact('user')); })->middleware('auth');
Lộ trình hồ sơ trên cho phép người dùng đã đăng nhập thay đổi thông tin hồ sơ của họ.
Tuy nhiên, giả sử có một is_admin
cột trong bảng người dùng. Bạn có thể không muốn người dùng được phép thay đổi giá trị của cột này. Tuy nhiên, đoạn mã trên cho phép người dùng thay đổi bất kỳ giá trị cột nào cho hàng của họ trong bảng người dùng. Đây là một lỗ hổng phân công hàng loạt.
Theo mặc định, Laravel có các tính năng tích hợp để bảo vệ khỏi lỗ hổng này. Đảm bảo những điều sau để giữ an toàn:
$request->only
hoặc $request->validated
hơn là $request->all
.$guarded
biến thành một mảng trống. Bằng cách này, bạn thực sự đang vô hiệu hóa tính năng bảo vệ gán khối lượng có sẵn của Laravel.forceFill
hoặc forceCreate
bỏ qua cơ chế bảo vệ. Tuy nhiên, bạn có thể sử dụng các phương pháp này nếu bạn đang chuyển vào một mảng giá trị đã được xác thực.Nguồn: https://cheatsheetseries.owasp.org/cheatsheets/Laravel_CheatSheet.html
You need to login in order to like this post: click here
YOU MIGHT ALSO LIKE