Co-Founder PT. NihonNoMise Global OverseasOnly the right people can read the data.
Data cannot be changed by the wrong people.
The service stays up when people need it.
You really are who you claim to be.
C-I-A is the classic triad.
Insecure Direct Object Reference: the app exposes an id and trusts whatever id the client sends, without checking who is allowed to see it.
GET /api/profile/1023GET /api/profile/1024200 OKThe response is JSON: profile fields plus a password reset token. Change the id, and the server hands you another user’s token.
GET /api/profile/1023Account Takeover (ATO): the attacker ends up controlling an account that is not theirs, able to log in and act as that user.
That leaked reset token is all it takes. No password needed.
"reset_token": "7bc3..."Pulled straight from the leaked user response.POST /reset-passwordSend the stolen token with a new password.200 OKThe server trusts the token and sets the password.POST /loginLog in as her. The account is yours.The hacking lab is ready. Let’s walk an IDOR all the way to a full account takeover, then patch it.
GET /api/profile/1/reset-password/[token]?email=victim@example.comCheck that the logged-in user owns the record, on the server, every time.
Scope queries to the current user, for example where user_id = auth id.
Prefer UUID or ULID over sequential numbers, as defense in depth.
Watch for one account walking through many ids in a row.
Never ship secrets like a reset token in a user response. Send what the screen needs, nothing more.