[UPHPU] RE: Javascript form validation [was Re: Posting a form]

Mac Newbold mac at macnewbold.com
Thu Feb 24 17:59:40 MST 2005


Today at 2:31pm, Jeffrey Moss said:

> Javascript "validation" (at least in the broad sense you're using it) has some 
> pretty awesome uses too, like I did a site that didn't have a security 
> certificate and I set it up to encrypt the password in md5 before submitting 
> the form.  You have to make the md5 algorithm in javascript, you can get that 
> on the web. I think Hotmail and Yahoo mail both use this for their non-ssl 
> login page.

Sending a password hash insecurely usually means that (unless it's salted) 
it can be cracked using a dictionary attack, like those at 
http://www.passcracking.com . See earlier list discussions on the topic, 
and an article on the uphpu.org web site.

The other thing that many people who set up something like that do not 
realize is that if they see your password hash (since it's being sent 
insecurely), they can use it to log in. They no longer need the actual 
password to log in, just the hash, since that's what your page expects to 
see. So you've just made it a different "password" they need to get in, 
but one that is just as easy to see as a plaintext password sent over http 
would be.

Also, for correctness sake, you're not "encrypting" the password in md5, 
you're hashing it with md5. Encrypting is a process that can be reversed 
via decryption to yield the original text. MD5 is not such an algorithm, 
since it was designed to be hard to reverse. Encryption algorithms will 
almost always make use of a key (or a public-private key pair) to do the 
encryption and decryption.

SSL is true encryption, and does use a key to encrypt the data before its 
sent, then the same key is used to decrypt it at the other end, getting 
back the actual bytes that were transferred originally.

The curious may ask "But how do my browser and a web server agree on a key 
to use, without having talked before, or arranged it in advance, and 
without having anyone watching be able to know what the key is?" That 
would be a good question to have. The answer is something called the 
Diffie-Hellman (sp?) technique. It lets two entities set up a shared key, 
even if all their communication is visible by the attacker. That technique 
is the initial part of SSL, as well as SSH communications and I believe 
TLS as well.

>As for the form action being parsed on the fly, sometimes it is necessary 
>when you have two different forms on one page and you need a little of 
>both. This is a problem with the original form specs not being flexible 
>enough for some things, like if you have an iframe with a form in it, and 
>you need to include some data from outside the iframe, you might either 
>have to insert variables into the form or re-parse the action string. 
>They're mostly hacks, but I'd hardly call that validation.

No, they're not validation, but they suffer most of the same problems. 
They don't work when javascript is disabled or unavailable. Some would say 
that having an iframe in a page try to change form values in the 
surrounding page, or vice versa, is not a good idea. I don't fault the 
specs for not being "flexible" enough to allow it.

>One of example of this off the top of my head that I find very useful is 
>this: www.realtor.com, when you type in some parameters and click 
>"advanced options", it captures everything you've already selected and 
>uses that on the advanced options page, which is extremely convenient for 
>me.

Sure. That can be done with a little bit of javascript, and it is 
convinient. But if the page doesn't work without the javascript, then I 
would say they've done it wrong. Prefilling is dandy, but it should be a 
choice between the Javascript Way or No Way.

> If you don't have javascript enabled then maps.google.com won't function at 
> all, and that is one of the best user interfaces I've seen. Same with Google 
> suggest.

I've not used either of them yet. Same for gmail... it _requires_ 
javascript flat out. I would be a little surprised if they didn't work 
_at_all_, but I would expect that performance would be degraded, and some 
features probably unavailable. There are some times where it's a hit 
you're willing to take, but many people IMHO take that hit way too 
lightly, and don't use it as the Absolute Last Resort. If javascript _is_ 
the main point of your UI, then it might be difficult to impossible to 
replace that functionality without it.

>Give a more specific example of how javascript validation prevents access 
>to the site by spiders?  I dont want spiders going into order pages...

Agreed. That's why the spider/robot thing isn't such an issue with 
validation, but is more of a general consideration with using javascript 
on your pages.

>unless I had a site with some sort of navigation gizmo that did funky 
>things with javascript and forms and stuff, spiders can still navigate 
>the site. Can spiders access popup screens? I bet some are designed to 
>bypass the onClick="javascript:popup" subroutines. If I were making a 
>spider I wouldn't want it to trace into form actions.

There you've hit it on the head. Funky navigation gizmos and javascript 
popups can be troubling to a web spider. I would assume that the simplest 
of javascript popups might be followable by some spiders, but I wouldn't 
depend on it. On one of my sites where it mattered a lot, we used the 
get_browser()/brower.ini stuff in php to check the User Agent string and 
determine if it was a bot or other non-js browser. When it is a non-js 
browser, all of the window.open("") popups become <a target=_new href=""> 
links instead.

>I think javascript is at a mature level right now, and the best websites 
>out there are going to make extensive use of it.

I can understand that, and to a degree, I think a lot of good sites will 
make use of it. As we've already seen a lot of bad sites (and sites that 
would have been good) _abuse_ javascript, and that will continue as well.

My problem isn't even with extensive use of javascript... it's with 
javascript that is _required_ for proper functioning of the site. It takes 
an extremely portable medium (HTML) and robs it of many of its virtues, 
much like Microsoft and Internet Explorer have tried to do to HTML and the 
Internet in general. ;)

Mac

--
Mac Newbold		MNE - Mac Newbold Enterprises, LLC
mac at macnewbold.com	http://www.macnewbold.com/



More information about the UPHPU mailing list