Чем approve отличается от обычного перевода токенов?
Перевод (transfer) немедленно меняет баланс: токены уходят с вашего адреса на чужой. Approve только записывает в смарт-контракт токена разрешение: «адрес X вправе списать у меня до N токенов». Деньги остаются на вашем кошельке — до тех пор, пока X не вызовет transferFrom. Именно поэтому пользователь не замечает угрозы: баланс не изменился, а право уже выдано. Риск: одна подпись открывает долгосрочный канал вывода.