Cách tiếp cận bảo mật của chúng tôi

Cập nhật lần cuối: 1 tháng 11, 2026

GeckoFlag là phần mềm chạy trên máy chủ của chính bạn. Để bạn có thể yên tâm giao phó thông tin dự án, nhà phát triển tự thực hiện kiểm tra bảo mật cho mỗi bản phát hành và công bố nội dung cũng như kết quả kiểm tra trên trang này.

Trang này là hồ sơ tự kiểm tra của nhà phát triểnĐây không phải là chứng nhận hay kiểm toán của tổ chức bên thứ ba. Chúng tôi cũng công bố cả những gì được kiểm tra, vì vậy bạn có thể dùng thông tin này làm căn cứ khi cân nhắc triển khai.

Các biện pháp bảo mật trong thiết kế

GeckoFlag tích hợp sẵn các biện pháp dưới đây. Tất cả đều có hiệu lực mà không cần thiết lập.

Bảo vệ mật khẩu

Mật khẩu không được lưu dưới dạng văn bản thuần mà được băm bằng bcrypt trước khi lưu. Token đặt lại mật khẩu cũng được băm khi lưu, và số lần yêu cầu đặt lại mật khẩu cũng bị giới hạn.

Giới hạn số lần thử đăng nhập

Các lần đăng nhập thất bại được đếm theo cả từng tài khoản lẫn từng địa chỉ IP nguồn kết nối; khi vượt quá một số lần nhất định, việc đăng nhập sẽ tạm thời bị hạn chế. Điều này giúp ngăn chặn tấn công vét cạn (brute force) và các cuộc tấn công nhắm vào nhiều tài khoản.

Chống CSRF

Token được xác minh ở mọi lần gửi biểu mẫu, ngăn các thao tác giả mạo từ trang web bên ngoài.

Chống XSS

Nội dung rich text trong vấn đề, bình luận, Wiki, ghi chú, v.v. được HTML Purifier xử lý để chỉ giữ lại các thẻ được cho phép trước khi lưu và hiển thị. Liên kết chỉ được phép dùng http và https. Văn bản do AI tạo ra cũng đều đi qua cùng quy trình xử lý này trước khi được lưu.

Chống SQL injection

Các thao tác với cơ sở dữ liệu sử dụng ORM của CakePHP 5 và prepared statement.

Xác minh header Host

Liên kết trong email đặt lại mật khẩu, email mời và email thông báo được tạo dựa trên tên miền đã đăng ký, chứ không dựa trên header Host của yêu cầu. Không thể dùng header Host giả mạo để thay liên kết trong email bằng một địa chỉ bên ngoài.

Lưu trữ tệp

Hình ảnh của vấn đề và tệp của dự án được lưu bên ngoài thư mục công khai, và chỉ được phục vụ sau khi xác nhận người xem là thành viên của dự án. Các tệp có phần mở rộng thực thi được như PHP sẽ không được chấp nhận.

Mã hóa khóa API

Khóa Claude API dùng cho các tính năng AI được mã hóa trước khi lưu vào cơ sở dữ liệu.

Token API của tích hợp Claude

Tích hợp Claude mặc định bị tắt và chỉ dùng được khi quản trị viên bật tính năng và cho phép từng người dùng. Mỗi token API chỉ được lưu dưới dạng giá trị băm và có thể đặt thời hạn. Khi đổi mật khẩu, các token sẽ mất hiệu lực. API kiểm tra quyền giống như trên màn hình, và token chỉ đọc không thể thay đổi bất cứ điều gì.

Hạn chế theo địa chỉ IP

Quản trị viên có thể giới hạn các địa chỉ IP được phép truy cập.

Khóa trình cài đặt

Sau khi thiết lập hoàn tất, màn hình trình cài đặt sẽ không còn truy cập được.

Bảo vệ các thư mục không công khai

Với Apache, truy cập trực tiếp vào các thư mục như cấu hình, nhật ký và mã nguồn bị chặn theo mặc định (với Nginx, xem Thiết lập khuyến nghị).

Tự động sao lưu trước khi cập nhật

Bản sao lưu được tự động tạo trước khi cập nhật phần mềm.

Xác minh chữ ký tệp cập nhật

Các tệp cập nhật chính thức có chữ ký số (Ed25519) của nhà phát triển. Trước khi cập nhật, chữ ký và nội dung của tất cả các tệp đều được đối chiếu; tệp đã bị sửa đổi hoặc tệp cập nhật không chính thức sẽ không được áp dụng.

Xác minh hình ảnh tải lên

Hình ảnh như ảnh đại diện, ảnh thu nhỏ và logo được xác định định dạng dựa trên nội dung tệp và được lưu với tên tệp ngẫu nhiên. Các thư mục lưu hình ảnh không phục vụ tệp nào khác ngoài hình ảnh (với Apache). Không chấp nhận SVG.

Header bảo mật

Gửi Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy và Permissions-Policy để ngăn clickjacking và rò rỉ thông tin sang các trang web bên ngoài. Khi vận hành qua HTTPS, Strict-Transport-Security cũng được gửi để trình duyệt luôn kết nối bằng HTTPS.

Quản lý phiên

Phiên được tạo lại mỗi lần đăng nhập. Việc thay đổi quyền, xóa tài khoản và đổi mật khẩu được áp dụng ngay cả cho các phiên đang đăng nhập. Để thay đổi địa chỉ email và mật khẩu, cần nhập mật khẩu hiện tại.

Kiểm tra bảo mật cho mỗi bản phát hành

Trước khi công bố một phiên bản mới, chúng tôi thực hiện các kiểm tra sau. Việc kiểm tra được tiến hành trên môi trường thử nghiệm có cấu hình giống môi trường thực tế, không thực hiện trên các dịch vụ đang hoạt động hay máy chủ của khách hàng. Nội dung đã thực hiện cho phiên bản mới nhất được ghi tại “Kết quả kiểm tra phiên bản mới nhất”.

Hạng mụcNội dung kiểm traCông cụ / tiêu chuẩnTần suất
Thư viện phụ thuộcKiểm tra các thư viện đang dùng có lỗ hổng đã biết hay không, và lập danh sách các thư viện sử dụng (SBOM)composer audit, OSV-Scanner, CycloneDXMỗi bản phát hành
Phân tích tĩnhPhát hiện từ mã nguồn các luồng mà dữ liệu đầu vào có thể đi đến các xử lý nguy hiểm (XSS, SQL injection, v.v.)Psalm (phân tích taint), PHPStan (cấp 5), SemgrepMỗi bản phát hành
Lọt thông tin bí mậtMật khẩu hoặc khóa API có bị lẫn vào mã nguồn hay tệp phân phối hay khônggitleaksMỗi bản phát hành
Quét độngĐăng nhập với tư cách quản trị viên và người dùng thông thường, gửi các yêu cầu tấn công thực tế và kiểm tra phản hồiNucleiMỗi bản phát hành
Kiểm tra quyềnCó thể xem hoặc thao tác vấn đề, tệp, ghi chú của dự án mà mình không tham gia bằng cách sửa ID trong URL hay khôngKiểm thử tự động (PHPUnit), kiểm tra thủ côngMỗi bản phát hành
Tải tệp lênTệp thực thi, tệp giả dạng hình ảnh, tệp ZIP thao túng đường dẫn, v.v. có bị từ chối hay khôngRà soát mã, kiểm tra thủ côngMỗi bản phát hành
XSSNhập chuỗi tấn công vào nội dung vấn đề, bình luận, Wiki, văn bản do AI tạo và kiểm tra tập lệnh có bị thực thi hay khôngRà soát mã, kiểm tra thủ côngMỗi bản phát hành
Kiểm tra theo cấu hình máy chủVới Apache, Nginx và từng cách bố trí thư mục công khai, có thể truy cập trực tiếp vào tệp cấu hình hay nhật ký hay khôngKiểm tra thủ côngMỗi bản phát hành
Tiện ích mở rộng tích hợp ClaudeLỗ hổng đã biết trong các thư viện mà tiện ích mở rộng sử dụng, cách xử lý token API và giới hạn nơi gửi yêu cầunpm audit, gitleaks, rà soát mãMỗi lần phát hành tiện ích mở rộng
Tự rà soát theo danh sách kiểm traKiểm tra từng hạng mục như xác thực, phiên, xác thực dữ liệu đầu vào, xử lý lỗiTham khảo OWASP ASVS 5.0 cấp 1, IPA (Nhật Bản): How to Secure Your WebsiteMỗi phiên bản chính
Trang web chính thứcThiết lập HTTPS và header bảo mật của geckoflag.comSSL Labs, Mozilla ObservatoryMỗi tháng 1 lần

Nếu phát hiện vấn đề có mức độ nghiêm trọng “Cao” hoặc “Trung bình”, chúng tôi sẽ không phát hành cho đến khi sửa và kiểm tra lại. Với mức “Thấp”, chúng tôi xem xét nội dung và sửa, hoặc ghi lại lý do không có ảnh hưởng.

Chính sách cập nhật thư viện phụ thuộc

Các lỗ hổng đã biết trong những thư viện GeckoFlag sử dụng (CakePHP, v.v.) được kiểm tra ở mỗi bản phát hành. Nếu phát hiện lỗ hổng ảnh hưởng đến GeckoFlag, chúng tôi sẽ công bố bản sửa lỗi theo các mốc thời gian dự kiến sau.

  • Mức độ nghiêm trọng “Khẩn cấp”, “Cao”: trong vòng 14 ngày kể từ khi lỗ hổng được công bố
  • Mức độ nghiêm trọng “Trung bình”: trong vòng 30 ngày kể từ khi lỗ hổng được công bố
  • Mức độ nghiêm trọng “Thấp”: trong bản phát hành tiếp theo (chậm nhất trong vòng 90 ngày)

Ngay cả với những lỗ hổng không ảnh hưởng đến cách GeckoFlag sử dụng thư viện, chúng tôi vẫn cập nhật lên phiên bản đã được sửa trong bản phát hành tiếp theo. Các thư viện dùng cho phát triển không được đưa vào tệp phân phối.

Kết quả kiểm tra phiên bản mới nhất: v1.11.0

Trong v1.11.0, không còn vấn đề chưa được sửa nào có mức độ nghiêm trọng “Cao” hoặc “Trung bình” (ngày kiểm tra: 2026-10-28).

Lần kiểm tra này nhắm vào các thay đổi kể từ v1.10.0 (tích hợp Claude, màu chữ, màu nền và đường phân cách trong văn bản định dạng, v.v.), đồng thời sửa các vấn đề đã tồn tại từ các phiên bản trước. Nếu bạn đang dùng v1.10.0 trở về trước, chúng tôi khuyến nghị cập nhật lên v1.11.0.

PHP / Cơ sở dữ liệuPHP 8.3, MariaDB 10.11
Máy chủ webApache 2.4, Nginx 1.24 (PHP-FPM 8.3), máy chủ tích hợp sẵn của PHP
Nơi thực hiệnMôi trường thử nghiệm của nhà phát triển
Kiểm traCông cụ (phiên bản)Phát hiện (Cao / Trung bình / Thấp)Xử lý
Thư viện phụ thuộcGitHub Advisory Database, FriendsOfPHP security-advisories (dữ liệu tính đến 2026-10-28; 89 gói)0 / 0 / 0Không có lỗ hổng đã biết trong các thư viện có trong tệp phân phối. Các lỗ hổng đã biết của thư viện dành cho phát triển đã được khắc phục bằng cách cập nhật trong v1.11.0 (thư viện dành cho phát triển không có trong tệp phân phối)
Phân tích tĩnh / rà soát mãPsalm 5.26.1 (phân tích taint), PHPStan 2.1.17 (mức 5), Semgrep 1.182.1, rà soát mã thủ công (các thay đổi kể từ v1.10.0: API và token của tích hợp Claude, văn bản định dạng, duy trì đăng nhập, cập nhật phần mềm; cùng với cách xuất liên kết trên mọi màn hình)1 / 1 / 3Các vấn đề “Cao”, “Trung bình” và 2 vấn đề “Thấp” đã được sửa trong v1.11.0. Vấn đề “Thấp” còn lại chỉ xảy ra do thao tác của chính người dùng và đã xác nhận mức ảnh hưởng hạn chế. Vấn đề “Cao” đã tồn tại từ các phiên bản trước
Lọt thông tin bí mậtgitleaks 8.24.20 / 0 / 0Đã kiểm tra cả mã nguồn và tệp phân phối. Cả 2 phát hiện đều là cảnh báo nhầm (chuỗi mẫu trong thư viện bên ngoài, v.v.)
Xác nhận bản sửaKiểm tra hoạt động trên môi trường thử nghiệm (PHP 8.3, MariaDB 10.11, Apache 2.4, Nginx 1.24, Chromium)—Với từng phát hiện, đã xác nhận vấn đề trước khi sửa không còn tái hiện
Quét độngNuclei v3.11.1 (mẫu v10.5.1), thực hiện khi chưa đăng nhập và với tư cách quản trị viên, thành viên0 / 0 / 0Không có vấn đề
Kiểm tra quyềnPHPUnit 12.5 (454 bài kiểm thử tự động. Ngoài các nội dung trước, xác nhận rằng API tích hợp Claude từ chối yêu cầu không có token, dùng token chỉ đọc, từ người dùng không được phép và khi tính năng bị tắt, đồng thời không bao giờ truy cập được dự án mà người dùng không tham gia)0 / 0 / 0Không có vấn đề
Kiểm tra theo cấu hình máy chủThủ công (Apache 2.4, Nginx 1.24 với 2 cách bố trí thư mục công khai; 39 URL như tệp cấu hình, nhật ký, phiên, tệp đã lưu)0 / 0 / 1Đã sửa trong v1.11.0: truy cập trực tiếp vào thư mục tệp của phiên bản cũ (files) nay cũng bị từ chối hoàn toàn trên Apache. Không có vấn đề khác
Danh sách kiểm traOWASP ASVS 5.0 cấp 1 (70 mục)Đáp ứng 50 trên 56 mục áp dụngLần này không rà soát lại (giữ nguyên kết quả của v1.10.0)
Tiện ích mở rộng tích hợp Claudenpm audit, gitleaks 8.24.2, mcpb validate, rà soát mã thủ công (geckoflag-1.0.0.mcpb)0 / 0 / 0Không có lỗ hổng đã biết ảnh hưởng đến các thư viện trong tệp phân phối. Đã kiểm tra cách xử lý token API và giới hạn nơi gửi yêu cầu (chỉ HTTPS, không đi theo chuyển hướng)

Kết quả kiểm tra của mọi phiên bản, kể cả các phiên bản trước, được lưu tại “Kết quả kiểm tra trước đây”.

Phạm vi chưa được kiểm tra

Các kiểm tra nêu trên có những giới hạn sau. Khi cân nhắc triển khai, vui lòng xem xét cả những điểm này.

  • Chưa được bên thứ ba kiểm tra. Hiện tại chưa thực hiện rà soát mã nguồn hay kiểm thử xâm nhập (penetration test) bởi chuyên gia bên ngoài.
  • Môi trường máy chủ của khách hàng nằm ngoài phạm vi kiểm tra. Mức độ an toàn thay đổi đáng kể tùy theo thiết lập và tình trạng cập nhật của hệ điều hành, máy chủ web, PHP và cơ sở dữ liệu.
  • Chưa kiểm tra trên mọi môi trường hosting. Các cấu hình đã kiểm tra chỉ giới hạn ở những cấu hình được ghi trong “Kết quả kiểm tra phiên bản mới nhất”.
  • Các dịch vụ bên ngoài nằm ngoài phạm vi. Mức độ an toàn của API của Anthropic dùng cho tính năng AI, ứng dụng Claude trên máy tính dùng cho tích hợp Claude, máy chủ gửi email, v.v. phụ thuộc vào từng nhà cung cấp.
  • Về những vấn đề công cụ tự động không phát hiện được. Các loại vấn đề mà công cụ không phát hiện được (như sai sót trong logic nghiệp vụ) được bổ sung bằng kiểm tra thủ công, nhưng không thể bao quát tất cả.

Báo cáo khi phát hiện lỗ hổng

Nếu bạn phát hiện một vấn đề có thể là lỗ hổng của GeckoFlag, vui lòng liên hệ trực tiếp qua kênh dưới đây thay vì công khai. Nhà phát triển sẽ trực tiếp xem xét mọi báo cáo.

Kênh báo cáo: Vui lòng liên hệ qua biểu mẫu liên hệ và chọn loại yêu cầu “Báo cáo lỗ hổng bảo mật”

Thông tin cần báo cáo

  • Phiên bản liên quan và màn hình/tính năng có vấn đề
  • Các bước tái hiện (trong phạm vi có thể)
  • Ảnh hưởng dự kiến
  • Môi trường máy chủ bạn đang dùng (PHP, máy chủ web, v.v.)

Đề nghị

  • Vui lòng thực hiện việc kiểm chứng trên môi trường do chính bạn quản lý, và không thực hiện thao tác mang tính tấn công nhắm vào các bản GeckoFlag do người khác vận hành hay geckoflag.com.

Nếu bạn muốn, chúng tôi sẽ ghi tên người báo cáo trong thông tin bảo mật của bản sửa lỗi để bày tỏ lời cảm ơn.

SHA-256 của tệp phân phối

Bạn có thể đối chiếu với các giá trị sau để xác nhận tệp đã tải xuống giống hệt tệp chính thức.

TệpSHA-256
GeckoFlag - 1.11.0.zip33354ac588c4cb4de2953c3c26a484953c2bb886f38196ba4bcf4fe629648399
geckoflag-1.0.0.mcpb44f2c6dfc9f437856d0680920a327820d757a14116064faa6e46ad8a961d0747

Cách kiểm tra: trên Windows, chạy Get-FileHash tên-tệp -Algorithm SHA256 trong PowerShell; trên macOS và Linux, chạy shasum -a 256 tên-tệp.

Thiết lập khuyến nghị để sử dụng an toàn

Mức độ an toàn của GeckoFlag cũng phụ thuộc vào thiết lập của máy chủ nơi cài đặt. Chúng tôi khuyến nghị các thiết lập sau.

  1. Hoàn tất cài đặt ngay sau khi tải lên: Cho đến khi cài đặt xong, bất kỳ ai biết URL đều có thể mở màn hình thiết lập. Sau khi đặt tệp lên máy chủ, hãy hoàn tất cài đặt ngay.
  2. Vận hành qua HTTPS: Thông tin đăng nhập và nội dung dự án được mã hóa khi truyền. Nhiều dịch vụ hosting cung cấp chứng chỉ SSL miễn phí. Lưu ý rằng một khi đã mở bằng HTTPS, trình duyệt sẽ kết nối tới địa chỉ đó bằng HTTPS trong 1 năm sau đó (từ v1.10.0). Hãy lưu ý điều này nếu bạn dự định ngừng dùng HTTPS.
  3. Đặt thư mục công khai (document root) là webroot: Tệp cấu hình và nhật ký sẽ nằm ở vị trí không thể nhìn thấy từ web.
  4. Nếu dùng Nginx, hãy thêm thiết lập: .htaccess không có tác dụng trên Nginx. Hãy thiết lập riêng để chặn truy cập vào các thư mục không công khai và không thực thi PHP trong thư mục lưu hình ảnh tải lên (webroot/img). Xem ví dụ cấu hình tại Hướng dẫn (Cài đặt).
  5. Cập nhật lên phiên bản mới nhất: Các bản sửa lỗi bảo mật được cung cấp trong phiên bản mới nhất. Hãy lấy tệp cập nhật từ trang web chính thức và kiểm tra SHA-256. Từ v1.10.0, chữ ký cũng được tự động kiểm tra trước khi cập nhật.
  6. Duy trì PHP và cơ sở dữ liệu ở phiên bản còn được hỗ trợ: Các phiên bản PHP đã hết hỗ trợ sẽ không nhận được bản sửa lỗi.
  7. Bảo vệ tài khoản quản trị viên: Hãy dùng mật khẩu dài, khó đoán và chỉ cấp quyền quản trị viên cho những người thực sự cần.
  8. Dùng hạn chế IP nếu sử dụng nội bộ: Bạn có thể giới hạn các địa chỉ IP được phép truy cập từ “Cài đặt”.
  9. Sao lưu định kỳ: Hãy lưu trữ cơ sở dữ liệu và các tệp đã tải lên ở một nơi tách biệt với máy chủ.

Liên hệ về bảo mật