# 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 `` | | Đường dẫn cá nhân | `C:\Users\\...` | 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`).