This question is about vulnerability to Greasemonkey intercepting passwords, right?
In that case, SSL does nothing to protect against theft of the user's credentials, the password (or hash, or whatever) will be obtained right from the user's browser and transmitted to the bad guys via GM_xmlhttpRequest().
If you try to encode or hash the password, client-side, Greasemonkey can intercept or even replace the responsible JS.
See "Can a website know if I am running a userscript?", you can make it harder for a script writer but, ultimately, if the bad-guys can get the user to install a Greasemonkey script (or worse, a full-on add-on/extension) then you can only make it harder -- not impossible -- for the user's account to be compromised.
I wouldn't even worry about it until/unless you have evidence that a malicious script or add-on is in use. Ultimately, the user is responsible for keeping his browser, and client-side interactions, secure.
Things you can do to make it harder (not impossible) for a scripter:
- Monitor your logs, checking for unusual activity (should be doing this anyway).
- Take protections against bots in general, see "When the bots attack!", for example.
- Warn user(s) if an actual script or ploy is detected.
- Monitor the users' accounts/actions for unusual activity.
- You can intercept the password, as it is typed, with JS and one-time encode some how. This will filter out the causal scripters but not the determined ones. Note that I do not recommend this, just including it for completeness.
- Put the password entry in a Flash dialog. Pure Greasemonkey has a hard time interacting with Flash. Again, I don't think this is cost-effective, but include it for completeness.
- Do NOT require any more tedious steps for legit users (one-time passwords, third channel authentication, etc.). This will only annoy the ever-loving heck out of your victims until they find a better alternative or workarounds (which they will).