To anyone clinging to outdated ideas like using SHA-1 (or SHA-256/512, RIPEMD-160, etc) for storing passwords a simple question to ask yourself.
Does your login server need to be able to process 4 billion logins per second? No?
Then why are you using a algorithm which allows the hacker to brute force at the rate of 4 billion attacks per second?
Actually I don't think that the algorithm is so important as limiting the # of attempts to login to the same account (as is done by banks) - it would be a pretty stupid piece of software that actually allows even 100 attempts to login to the same account within minutes.
Brute force attacks are done against the db. No server side code is going to stop that. Honestly password878 is likely strong enough against an attacker trying to login as you. Of course no attacker tries to login as you.
In my opinion password salts have limited usefulness if they are stored right next to the passwords. I say this because if you know the salt and how it's applied to the password then the work of the gpu finding the password is really just the work of scanning passwords. The salt is irrelevant since it takes so little time to calculate. I don't have a good solution off-hand for how to store salts separately or generate them as needed.
That isn't the purpose of salt. Salt isn't a secret salt accomplishes two things.
1) Salt prevent precomputation attacks. 20,000 computer years is a long time right? Well lets say your db is stolen today. Well the strong passwords are safe for 20,000 years right? What if attacker(s) started hashing passwords 20 years ago using 1,000 computers? Without salt
precomputation becomes a viable attacker. Lookup tables for just about every algorithm would already exist and your password likely would be compromised before you even thought of it. Even a password like "KJ#!Ks9d8k" would be instantly brute forced in "seconds" well technically not in seconds but the work can be done ahead of time so it would be compromised seconds after the db was compromised.
2) Salt prevents parallel attacks. Say a password db has 10,000 records. An attacker hashes password123. Without salt they can compare it not against 1 record but against all 10,000. 1 hash = 10,000 attacks. Ouch. With salt the hacker can hash password123 with the salt of record 1 but the resulting hash is only good for record 1. To test "password123" against all 10,000 records requires 10,000 hashes. Which is better security 1 hash = 10,000 attacks or 1 hash = 1 attack.
Salt isn't a secret. Salt is designed to limit the attacker to hash per attempted password per account in realtime. Nothing more.