Hai người đọc thông báo lỗi của bạn
Mỗi thông báo lỗi có hai người đọc với hai nhu cầu đối lập:
| Người đọc | Cần gì |
|---|---|
| Người dùng hoặc developer tích hợp | Đủ thông tin để tự sửa request của họ |
| Kẻ tấn công | Bất cứ gì nói về bên trong hệ thống |
Cách giải quyết không phải chọn một bên mà là nhận ra hai nhu cầu đó cần hai loại thông tin khác nhau:
- Người dùng cần biết cái gì trong request của họ sai — trường nào, quy tắc nào.
- Kẻ tấn công muốn biết hệ thống được xây bằng gì và bên trong nó có gì — framework, phiên bản, tên bảng, đường dẫn file, tên host nội bộ.
Hai tập đó gần như không giao nhau, nên bạn cho được tập một mà không cho tập hai.
Bốn thứ hay lộ ra và mỗi thứ cho kẻ tấn công một mảnh bản đồ:
| Lộ ra | Nói gì cho kẻ tấn công |
|---|---|
| Stack trace | Framework, phiên bản, cấu trúc thư mục, tên class nội bộ, có debug symbol không |
| Lỗi cơ sở dữ liệu nguyên văn | Loại DB, tên bảng, tên cột, và một kênh cho SQL injection dựa vào lỗi |
| Đường dẫn file tuyệt đối | Hệ điều hành, tên người dùng chạy tiến trình, layout của container |
| Thông báo lỗi khác nhau cho cùng một hành động | Xem bài account-enumeration — mỗi chênh lệch là một bit |
Hàng thứ hai đáng nhấn: một lỗi cơ sở dữ liệu nguyên văn không chỉ tiết lộ schema, nó biến một SQL injection blind thành một SQL injection có phản hồi. Kẻ tấn công không phải suy luận từ thời gian phản hồi nữa; họ đọc được thông báo lỗi nói rõ truy vấn của họ sai ở đâu, và điều đó rút thời gian khai thác từ hàng giờ xuống hàng phút.
Và giải pháp cho mâu thuẫn: một mã tương quan. Trả ra ngoài một traceId, ghi đầy đủ vào log, và nói với người dùng "hãy đưa mã này cho support". Người dùng có đường đi tiếp, support có đủ thông tin, và kẻ tấn công nhận được một GUID.
Bình luận
Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.
Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.
Đang tải bình luận…