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.
- Biện pháp trong thiết kế
- Kiểm tra cho mỗi bản phát hành
- Kết quả kiểm tra phiên bản mới nhất
- Phạm vi chưa được kiểm tra
- Báo cáo lỗ hổng
- Xác minh tệp phân phối
- Thiết lập khuyến nghị
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ục | Nội dung kiểm tra | Công cụ / tiêu chuẩn | Tần suất |
|---|---|---|---|
| Thư viện phụ thuộc | Kiể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, CycloneDX | Mỗi bản phát hành |
| Phân tích tĩnh | Phá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), Semgrep | Mỗi bản phát hành |
| Lọt thông tin bí mật | Mậ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ông | gitleaks | Mỗ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ồi | Nuclei | Mỗi bản phát hành |
| Kiểm tra quyền | Có 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ông | Kiểm thử tự động (PHPUnit), kiểm tra thủ công | Mỗi bản phát hành |
| Tải tệp lên | Tệ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ông | Rà soát mã, kiểm tra thủ công | Mỗi bản phát hành |
| XSS | Nhậ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ông | Rà soát mã, kiểm tra thủ công | Mỗ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ông | Kiểm tra thủ công | Mỗi bản phát hành |
| Tiện ích mở rộng tích hợp Claude | Lỗ 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ầu | npm 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 tra | Kiể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ỗi | Tham khảo OWASP ASVS 5.0 cấp 1, IPA (Nhật Bản): How to Secure Your Website | Mỗi phiên bản chính |
| Trang web chính thức | Thiết lập HTTPS và header bảo mật của geckoflag.com | SSL Labs, Mozilla Observatory | Mỗ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
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.
| Kiểm tra | Công cụ (phiên bản) | Phát hiện (Cao / Trung bình / Thấp) | Xử lý |
|---|---|---|---|
| Thư viện phụ thuộc | GitHub Advisory Database, FriendsOfPHP security-advisories (dữ liệu tính đến 2026-10-28; 89 gói) | 0 / 0 / 0 | Khô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 / 3 | Cá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ật | gitleaks 8.24.2 | 0 / 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ửa | Kiể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 động | Nuclei 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ên | 0 / 0 / 0 | Không có vấn đề |
| Kiểm tra quyền | PHPUnit 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 / 0 | Khô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 tra | OWASP ASVS 5.0 cấp 1 (70 mục) | Đáp ứng 50 trên 56 mục áp dụng | Lầ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 Claude | npm audit, gitleaks 8.24.2, mcpb validate, rà soát mã thủ công (geckoflag-1.0.0.mcpb) | 0 / 0 / 0 | Khô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ệp | SHA-256 |
|---|---|
| GeckoFlag - 1.11.0.zip | 33354ac588c4cb4de2953c3c26a484953c2bb886f38196ba4bcf4fe629648399 |
| geckoflag-1.0.0.mcpb | 44f2c6dfc9f437856d0680920a327820d757a14116064faa6e46ad8a961d0747 |
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.
- 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.
- 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.
- Đặ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.
- 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).
- 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.
- 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.
- 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.
- 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”.
- 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ủ.