🌐 Ngôn ngữ: 🇻🇳 Tiếng Việt (hiện tại) · 🇬🇧 English · 🇯🇵 日本語
Hệ thống bảo vệ những gì — các lớp bảo vệ có sẵn và giới hạn
Giới thiệu
Trang này liệt kê các cơ chế bảo mật có sẵn trong GP247 (gói gp247/core, gp247/front, gp247/shop, gp247/mcp).
Mỗi cơ chế có hai dòng: nó làm gì và giới hạn của nó, tức phần bạn phải tự bổ sung. Trang dành cho chủ site, người
phụ trách kỹ thuật và lập trình viên plugin. Đọc xong bạn biết lớp nào đã có và lớp nào phải tự lo.
Nhìn nhanh
Một yêu cầu từ trình duyệt đi qua nhiều lớp trước khi chạm dữ liệu. Sơ đồ cho thấy lớp nào thuộc GP247, lớp nào thuộc máy chủ của bạn:
flowchart LR
U["Trình duyệt<br/>ứng dụng, AI agent"] --> W["Web server<br/>HTTPS 👤"]
W --> A["Đăng nhập<br/>giới hạn số lần ✅"]
A --> P["Phân quyền<br/>theo màn hình ✅"]
P --> I["Kiểm tra dữ liệu vào<br/>form, file ✅"]
I --> D["Cơ sở dữ liệu<br/>bí mật mã hoá ✅"]
P --> L["Nhật ký thao tác ✅"]
D --> K["Sao lưu 👤"]
- ✅ = GP247 làm sẵn, 👤 = bạn làm. HTTPS và sao lưu nằm ngoài ứng dụng nên GP247 không làm thay được.
- Mặc định an toàn ở chỗ GP247 kiểm soát được: debug tự tắt khi chạy production, MCP tắt sẵn, bí mật không hiện lại trên màn hình.
- Không có lớp nào tuyệt đối: người có toàn quyền máy chủ (cả cơ sở dữ liệu lẫn file
.env) vẫn đọc được mọi thứ.
Trong trang này
- Đăng nhập & mật khẩu
- Phân quyền
- Bí mật & mã hoá
- Form, dữ liệu vào và file tải lên
- Tiền, thanh toán và webhook
- REST API & MCP
- Nhật ký
- Cấu hình chạy thật & Docker
- Cài đặt & cập nhật
- Những gì GP247 không làm
Đăng nhập & mật khẩu
Lớp này chống đoán mật khẩu và giữ mật khẩu an toàn nếu cơ sở dữ liệu bị lộ.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Giới hạn đăng nhập sai | Mặc định 5 lần/phút cho mỗi tài khoản + địa chỉ IP, 20 lần/phút cho mỗi IP (GP247_LOGIN_THROTTLE, GP247_LOGIN_IP_THROTTLE). Trang đăng nhập quản trị và đăng nhập quản trị qua API dùng chung bộ đếm, nên đổi kênh không lách được |
Không chặn được tấn công từ rất nhiều IP; nên dùng mật khẩu mạnh + xác thực hai lớp |
| Băm mật khẩu | Mật khẩu lưu bằng bcrypt (một chiều), không ai đọc ngược lại được, kể cả người có cơ sở dữ liệu | — |
| Chính sách mật khẩu quản trị | Màn Chính sách mật khẩu đặt độ dài tối thiểu, bắt buộc chữ hoa/thường, số, ký tự đặc biệt | Mặc định chỉ yêu cầu 6 ký tự — nên nâng lên |
| Phiên đăng nhập | Tạo mã phiên mới sau khi đăng nhập; chỉ tài khoản đang hoạt động mới đăng nhập được | Cookie chỉ gửi qua HTTPS khi bạn đặt SESSION_SECURE_COOKIE=true |
| Xác thực hai lớp | Plugin miễn phí MFA: mã TOTP cho quản trị viên, khách hàng, người bán; áp cho cả đăng nhập qua API v2 | Phải cài và bật plugin; lõi không có sẵn |
| Captcha | Plugin GoogleCaptcha gắn vào đăng ký, quên mật khẩu, thanh toán, liên hệ, đánh giá | Phải cài và bật từng trang ở cấu hình cửa hàng |
Phân quyền
Lớp này bảo đảm mỗi người chỉ vào và chỉ thao tác được đúng phần được giao.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Quyền theo địa chỉ + phương thức | Mỗi quyền là danh sách địa chỉ màn hình kèm kiểu thao tác (xem / thao tác). Menu, việc vào màn và việc lưu đều kiểm cùng một danh sách; thao tác Livewire trên màn cũng bị kiểm | Bạn quyết định cấp gì — cấp rộng thì hệ thống làm đúng như cấp. Xem Phân quyền |
| Vai trò đặc biệt | Administrator làm được mọi thứ; View.all xem được mọi màn nhưng không sửa | Hạn chế số người giữ Administrator |
| Nhiều cửa hàng | Quản lý cửa hàng chỉ thấy dữ liệu cửa hàng mình (khi dùng plugin nhiều cửa hàng) | Gán đúng cửa hàng cho từng tài khoản |
| API & MCP không rộng quyền hơn màn quản trị | Gọi qua API hay AI agent vẫn đi qua cùng phân quyền của tài khoản đó | Token của ai mang quyền người đó — thu hồi khi người đó nghỉ |
Bí mật & mã hoá
Lớp này giữ các bí mật (mật khẩu, khoá bên thứ ba) không đọc được nếu ai đó lấy được bản sao cơ sở dữ liệu.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Mã hoá bí mật cấu hình | Mật khẩu SMTP, secret captcha, OAuth client secret, license plugin trả phí, mã link thanh toán được mã hoá trong cơ sở dữ liệu bằng khoá GP247_ENCRYPTION_KEY (chưa đặt thì dùng APP_KEY) |
Mất khoá = mất bí mật; phải sao lưu .env. Xem Khoá mã hoá & sao lưu |
| Bí mật không hiện lại | Ô bí mật trên màn cấu hình chỉ cho ghi đè, không hiện giá trị cũ, không gửi xuống trình duyệt | — |
| Khoá sai không làm sập site | Không giải mã được thì bí mật được coi là rỗng, tính năng liên quan (gửi mail, thanh toán) tạm ngừng, site vẫn chạy; gp247:doctor mục secret_decryptable chỉ ra dòng hỏng |
Lỗi im lặng — hãy chạy gp247:doctor sau khi chuyển máy chủ hoặc đổi .env |
| Đổi khoá không mất dữ liệu | Lệnh php artisan gp247:encryption-key-rotate mã hoá lại mọi bí mật sang khoá mới |
Phải làm đúng quy trình ở Mã hoá dữ liệu nhạy cảm |
⚠️ Lưu ý: secret ký webhook của REST API vẫn được mã hoá bằng
APP_KEY, không bằng khoá riêng. ĐổiAPP_KEYthì phải tạo lại secret cho từng webhook.
Form, dữ liệu vào và file tải lên
Lớp này chống việc trang khác giả mạo thao tác của bạn và chống chèn mã độc qua dữ liệu nhập.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Chống giả mạo form (CSRF) | Mọi form trên web có mã chống giả mạo; trang khác không gửi thay bạn được | — |
| Mã hoá đầu ra | Nội dung hiển thị được mã hoá HTML theo mặc định; chuỗi ngôn ngữ do quản trị viên sửa được làm sạch khi lưu | Plugin/giao diện tự viết phải giữ quy tắc này |
| File tải lên | Trình quản lý file kiểm kiểu file và dung lượng, chặn file php và html; thao tác xoá, đổi tên, di chuyển chỉ nhận yêu cầu từ chính trang quản trị |
File tải lên được phục vụ công khai trên cùng tên miền — chỉ cấp quyền quản lý file cho người tin cậy |
| Dữ liệu nhập ở cửa hàng | Giá, giá thuộc tính, số lượng giỏ hàng do máy chủ tính lại, không tin số trình duyệt gửi lên | — |
Tiền, thanh toán và webhook
Lớp này chống ghi tiền hai lần và chống giả mạo thông báo thanh toán.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Ghi tiền một lần | Đặt hàng và ghi nhận thanh toán có chống trùng; bấm hai lần không tạo hai đơn | — |
| Link thanh toán | Mã link không đoán được, so khớp an toàn; trang thanh toán và đặt hàng có giới hạn số lần gửi | — |
| Webhook nhận vào | Địa chỉ webhook vận chuyển có giới hạn tần suất | Plugin cổng thanh toán / vận chuyển phải tự xác minh chữ ký của hãng — chọn plugin từ nguồn tin cậy |
| Webhook gửi đi | Có chữ ký HMAC để bên nhận kiểm; chỉ gửi tới địa chỉ HTTPS công khai, không gửi vào mạng nội bộ | Bên nhận phải kiểm chữ ký |
REST API & MCP
Hai "cửa" cho phần mềm bên ngoài. Chi tiết ở trang riêng; tóm tắt các bảo vệ chính:
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Công tắc | GP247_API_MODE=0 gỡ toàn bộ route API; màn Cấu hình API bật/tắt từng phần; tắt công tắc tổng là tắt luôn MCP. MCP tắt sẵn khi mới cài |
Chỉ bật phần dùng tới |
| Token | Lưu dạng băm, có hạn dùng, xoay vòng được, thu hồi được | Mỗi ứng dụng / máy một token; thu hồi khi không dùng |
| Thông tin khách qua MCP | Che thông tin cá nhân của khách theo mặc định | Giữ mặc định trừ khi thật cần |
Đọc thêm: Đăng nhập, token và tài khoản khách qua API · An toàn & phân quyền của MCP.
Nhật ký
Lớp này giúp bạn biết ai đã làm gì, khi nào.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Nhật ký thao tác quản trị | Ghi mỗi lượt quản trị viên mở màn, lưu, thao tác Livewire, gọi API quản trị, gọi MCP (GP247_ADMIN_LOG=1). Che mật khẩu, secret, token, license trong dữ liệu ghi |
Không ghi lần đăng nhập sai; không tự xoá bản ghi cũ — thỉnh thoảng xem và dọn ở màn Nhật ký truy cập |
| File log ứng dụng | Ghi lỗi vào storage/logs/gp247.log, một file mỗi ngày, giữ 14 ngày (LOG_DAILY_DAYS) |
Đặt LOG_LEVEL phù hợp khi chạy thật; không để thư mục storage/ truy cập được từ web |
Cấu hình chạy thật & Docker
Lớp này giảm thiệt hại khi cấu hình lỡ sai.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Tự tắt debug | Khi APP_ENV=production, GP247 ép tắt debug dù APP_DEBUG đặt gì |
Chỉ áp khi APP_ENV đúng là production |
| Nhãn môi trường | Header trang quản trị hiện môi trường đang chạy và nhãn đỏ "DEBUG ON" (GP247_ENV_BADGE) |
Nhìn thấy thì phải xử lý |
| Docker production | docker-compose.prod.yml ghim APP_ENV=production, APP_DEBUG=false cho mọi dịch vụ; từ chối khởi động khi còn mật khẩu mẫu của .env.example; tắt các tính năng PHP không dùng; nginx chặn file ẩn và thư mục nội bộ |
Bật HTTPS ở proxy phía trước; cập nhật image định kỳ |
Cài đặt & cập nhật
Lớp này chống cài đè làm mất dữ liệu và chống gói cập nhật bị thay.
| Cơ chế | GP247 làm gì | Giới hạn — bạn làm |
|---|---|---|
| Cài đặt | Lệnh gp247:install hỏi xác nhận và cảnh báo mất dữ liệu; từ chối cài đè site đã cài nếu không có xác nhận rõ |
Sau khi cài, kiểm trang /install đã chuyển sang trang đăng nhập và đổi ngay tài khoản mặc định |
| Cập nhật nền tảng | php artisan gp247:update chỉ làm mới, không bao giờ chạy lại bước cài phá dữ liệu |
Sao lưu trước khi cập nhật |
| Cập nhật plugin / template | Gói tải về qua kết nối được kiểm chứng chỉ (GP247_UPDATE_VERIFY_SSL), kiểm mã băm khi thư viện cung cấp; giữ bản cũ ở storage/backups/extensions/ trước khi ghi đè |
Chỉ cài từ nguồn tin cậy |
Những gì GP247 không làm
Các việc dưới đây không có trong GP247 — nếu bạn không làm thì không ai làm:
- Không bật HTTPS, không gửi header HSTS / CSP — cấu hình ở web server hoặc proxy.
- Không sao lưu cơ sở dữ liệu,
.env, ảnh tải lên — xem Khoá mã hoá & sao lưu. - Không buộc đổi tài khoản quản trị mặc định — xem Tài khoản & phân quyền.
- Không kiểm
APP_DEBUG, HTTPS bằnggp247:doctor— tự kiểm theo Cấu hình production. - Không báo bản vá bảo mật của nền tảng ngay trong trang quản trị — theo dõi trang phát hành.
- Không vá PHP, web server, hệ điều hành — đó là việc của bạn hoặc nhà cung cấp hosting.
Điều kiện & ràng buộc (hiểu trước khi thao tác)
- Bảo vệ áp cho phần lõi GP247 — plugin và giao diện của bên thứ ba có thể bỏ qua các quy tắc này; chỉ cài từ nguồn tin cậy.
- Một số cơ chế cần plugin (xác thực hai lớp, captcha, chặn IP bằng plugin CheckIP) — không cài thì không có.
- Giá trị mặc định đổi được bằng
.env— đổi giới hạn đăng nhập hay tắt nhật ký là quyết định của bạn; tài liệu này mô tả giá trị mặc định.
Hỏi & Đáp (Q&A)
Câu 1: Có cần plugin bảo mật nào không?
→ Nên cài MFA (xác thực hai lớp) cho tài khoản quản trị, và GoogleCaptcha nếu cửa hàng bị đăng ký rác. Cả hai đều miễn phí.
Câu 2: Nhật ký có ghi ai đăng nhập sai không?
→ Không. Nhật ký ghi thao tác của người đã đăng nhập. Lần đăng nhập sai chỉ bị giới hạn số lần, không được ghi lại.
Câu 3: Người lấy được bản sao cơ sở dữ liệu đọc được mật khẩu SMTP không?
→ Không, nếu họ không có file .env chứa khoá. Có cả hai thì đọc được — vì vậy hãy cất bản sao lưu .env tách khỏi bản sao lưu cơ sở dữ liệu.
Câu 4: Debug đã tự tắt khi APP_ENV=production, vậy APP_DEBUG còn quan trọng không?
→ Có. Nếu APP_ENV gõ sai (vd prod, Production) thì GP247 không ép tắt. Đặt cả hai cho chắc: APP_ENV=production, APP_DEBUG=false.
Câu 5: GP247 có chặn IP lạ vào trang quản trị không?
→ Lõi chỉ giới hạn số lần đăng nhập. Muốn chỉ cho phép vài IP, dùng plugin CheckIP hoặc cấu hình ở web server.
Câu 6: AI agent kết nối qua MCP có làm được nhiều hơn tôi không?
→ Không. Agent mang đúng quyền của tài khoản đã tạo token, không hơn. Xem An toàn & phân quyền của MCP.
Câu 7: Vì sao tài liệu nói "giới hạn" ở mọi dòng?
→ Để bạn không tưởng nhầm "đã có lớp bảo vệ thì khỏi làm gì". Phần "bạn làm" mới là phần quyết định site có an toàn hay không.
📅 Cập nhật lần cuối: 2026-11-04 · ✍️ Tác giả (Author): GP247