Defense 1: Encrypt-then-MAC
Compute a MAC over the ciphertext (not the plaintext). Verify the MAC before attempting decryption. If the MAC is invalid, reject immediately — no decryption, no padding, no oracle.
Requires: Constant-time MAC comparison. Timing differences in comparison can still leak information.