Bộ 7 role chuyên biệt (triage → specialist → implementer → reviewer) cùng lớp dùng chung: guardrail, tri thức về repo, checklist, và contract đầu ra. Vì sao có: bug UI/UX được báo bằng lời kể triệu chứng, và người sửa hay bỏ qua ba thứ mà repo này rất dễ vi phạm — luật "không file nào ngoài theme/ được đặt tên một màu", trần LOC theo bánh cóc, và việc ui/ với presentation/ cùng tồn tại nên sửa nhầm file là "đã fix mà vẫn thấy lỗi". knowledge/qt_pitfalls.md chép lại 20 nguyên nhân gốc hay gặp của bug PySide6; examples/bad_fix.md có hai ca CÓ THẬT, gồm ca chính bản vá trong nhánh này từng mắc (compare_digest trên str ngoài ASCII) và lọt qua vòng review đầu. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
58 lines
3.1 KiB
Markdown
58 lines
3.1 KiB
Markdown
# Security Policy cho agent xử lý bug UI/UX
|
|
|
|
Nguồn: `SECURITY.md`, `docs/governance/review-policy.md`, `docs/architecture/security-policy.md`.
|
|
Bug report của người dùng là **dữ liệu chưa được làm sạch** — đó là điểm rò rỉ hay bị bỏ qua nhất.
|
|
|
|
---
|
|
|
|
## S1. Làm sạch input trước khi đưa vào bất kỳ output nào
|
|
|
|
Bug report UI thường kèm ảnh chụp màn hình và log. Trước khi trích vào `defect_record.md`,
|
|
PR body, hay commit message, phải loại bỏ:
|
|
|
|
| Loại | Ví dụ hay lọt trong app này | Xử lý |
|
|
|---|---|---|
|
|
| API key / token | `sk-...`, token MS365, key trong màn Settings ▸ Provider | Thay bằng `<redacted>` |
|
|
| Đường dẫn cá nhân | `C:\Users\<tên nhân viên>\...` | Rút gọn thành `%USERPROFILE%\...` |
|
|
| Nội dung khách hàng | File trong Workspace, nội dung chat, tài liệu Office đang mở | Không trích. Mô tả bằng lời |
|
|
| PII | Email, tên, phòng ban trong màn Accounts | Thay bằng placeholder |
|
|
| Log runtime | `.cowork_local/` audit log, MCP call history | Chỉ trích đúng dòng liên quan, đã redact |
|
|
|
|
Nếu ảnh chụp màn hình chứa dữ liệu khách hàng: **không nhúng ảnh vào issue/PR**, mô tả
|
|
vùng lỗi bằng toạ độ/tên widget.
|
|
|
|
## S2. Không đọc/ghi secret khi debug UI
|
|
|
|
- Không in `SecretStore`/keyring ra log để "kiểm tra".
|
|
- Không thêm `print()`/`logger.debug()` tạm vào đường đi của credential rồi quên gỡ.
|
|
- Không commit `.env`, `config.json` local, hay bất cứ thứ gì dưới `%USERPROFILE%\.cowork_local\`.
|
|
|
|
## S3. Bug UI vẫn có thể là bug bảo mật
|
|
|
|
Đánh dấu `security-review: required` nếu bản sửa chạm tới:
|
|
|
|
- màn hình/hộp thoại **Permission** (`ui/permission_dialog.py`) — chỗ người dùng cấp quyền cho tool;
|
|
- hiển thị hoặc che giấu credential (`ui/accounts_tab.py`, `ui/login_dialog.py`,
|
|
`presentation/settings/provider_settings_widget.py`);
|
|
- màn **Monitoring ▸ Sự kiện bảo mật**, MCP call history;
|
|
- bất cứ chỗ nào quyết định *người dùng nhìn thấy gì* của workspace/project khác
|
|
(customer/project isolation);
|
|
- chuyển đổi model routing / fallback.
|
|
|
|
Với nhóm này: CI xanh **không** đủ để merge (`docs/governance/review-policy.md`).
|
|
|
|
## S4. Lỗi UI có hệ quả bảo mật — nhận diện sớm
|
|
|
|
Không xem nhẹ mấy triệu chứng sau, chúng là bug bảo mật đội lốt bug UI:
|
|
|
|
- Hộp thoại xác nhận quyền hiện **sau** khi hành động đã chạy, hoặc bị bỏ qua khi bấm nhanh.
|
|
- Nút "Cho phép" là default button / nhận Enter — người dùng cấp quyền mà không đọc.
|
|
- Ô mật khẩu không `QLineEdit.Password`, hoặc key hiện dạng plaintext khi resize/copy.
|
|
- Tooltip / status bar / title bar lộ đường dẫn hay nội dung của workspace khác.
|
|
- Toast lỗi in nguyên exception kèm request body.
|
|
|
|
## S5. Không rewrite history
|
|
|
|
Nếu phát hiện secret đã nằm trong Git history: dừng lại, báo Cowork Team.
|
|
Không force-push, không tự sửa history (`SECURITY.md`).
|