Usually it's pretty hard to appropriately protect a communication channel which uses couple of layers of really complicated software. Say we run an internet banking site through an ssl-ed http server. The client needs to have 1) a web browser of which there's couple quite popular ones and each of them once in a while turns out to be vulnerable to some kind of an attack, 2) an ssl library of which, again, there's couple of implementations and they already proved not being entirely bug free (not to mention the algorithm itself from time to time revealing its weaknesses) and finally 3) all this has to make use of an operating system of some kind and the most popular OSes tend to resemble a good Swiss cheese in terms of security.
There's of course a good deal of reason for all this to still be insecure. One of which being the amount of code which is not easy to be managed. And so on, and so on. But actually it doesn't matter what the reason is, the important thing is that we are not secure enough and we won't be in any near future (no, I don't think Vista is going to surprise us here — actually, judging from what it already shown, it's going to be even worse than it already is). So, instead of relying entirely on the one potentially unsafe channel it's better to use a totally independent additional channel to check and confirm the sanity of the primary one. Think SMS.
It's not totally impossible to take over the additional channel also, but it's difficult and expensive enough to render the whole thing totally not worth an effort. Of course it still relies on user awareness, but at least now there's something one can be pretty sure to be an accurate piece of information.
So, before typing out a money transfer confirmation code from an SMS received from your bank, please check if the account number in the SMS really matches the one you wanted your money to be sent to. You'll make scammers' lives harder and your money will be a wee bit more safe.