Mass Assignment - tự nâng quyền qua request body
PATCH · /api/practice/level5/accounts/me · Chuyên sâu
Mô tả bài tập
Mass Assignment xảy ra khi server nhận nguyên object client gửi lên rồi gán thẳng vào dữ liệu lưu trữ, thay vì chỉ lấy đúng những field được phép sửa (whitelist). PATCH /accounts/me được thiết kế để bạn cập nhật email/phone của mình, nhưng hãy thử gửi thêm field không nằm trong tài liệu hướng dẫn, ví dụ { "role": "admin" } - nếu server không whitelist field, giá trị đó sẽ 'dính' vào tài khoản của bạn dù chưa từng có nút hay form nào cho phép đổi role.
Mục tiêu học được
- Hiểu Mass Assignment là gì: input không được whitelist field-by-field ở phía server
- Luyện thói quen thử gửi thêm các field 'nhạy cảm' phỏng đoán được (role, isAdmin, isVerified, balance...) dù UI không hiển thị chúng
- Phân biệt Mass Assignment (lỗi ở input/ghi dữ liệu) với Excessive Data Exposure (lỗi ở output/đọc dữ liệu)
💡 Bài này hoàn thành ngay khi PATCH thành công khiến role tài khoản của bạn đổi thành 'admin'.
Lệnh curl
curl -i -X PATCH "http://testing-api.systemhub.uk/api/practice/level5/accounts/me" \
-H "X-Practice-Token: YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"phone": "0909-999-999", "role": "admin"}'
Các bước làm trên Postman
- GET http://testing-api.systemhub.uk/api/practice/level5/accounts/me, kiểm tra role hiện tại là 'user'
- PATCH http://testing-api.systemhub.uk/api/practice/level5/accounts/me với body { "phone": "0909-999-999", "role": "admin" }
- Kiểm tra response trả về: role đã đổi thành 'admin' dù bạn chưa từng được cấp quyền này
- GET lại /accounts/me để xác nhận role='admin' đã được lưu lại thật sự, không phải chỉ hiển thị tạm
Đăng nhập để lệnh curl ở trên tự động điền sẵn Practice Token thật của bạn.
🧪 Thử nghiệm trực tiếp
Gọi API ngay tại đây. Nếu bạn đã đăng nhập, tiến độ sẽ được ghi nhận tự động khi gọi đúng như kỳ vọng của bài.
Kết quả
Status: