W3C home > Mailing lists > Public > whatwg@whatwg.org > March 2006

[whatwg] The problem of duplicate ID as a security issue

From: Lachlan Hunt <lachlan.hunt@lachy.id.au>
Date: Sun, 19 Mar 2006 15:10:33 +1100
Message-ID: <441CD9B9.2000407@lachy.id.au>
Mihai Sucan wrote:
> Yet getElementById is defined as [2]:
> 
> <blockquote>
>     Returns the Element that has an ID attribute with the given value. 
> If no such element exists, this returns null.
>     If more than one element has an ID attribute with that value, what 
> is returned is undefined.
> </blockquote>
> 
> Therefore... the appropriate behaviour for 
> getElementById("duplicate-ID") is to return null.

No, the spec says the behaviour is undefined and so UAs can return 
whatever they like and still be considered conformant.  I agree that it 
should be defined, but it should be defined in the way most compatible 
with existing implementations and since no existing implementation (at 
least none that I know of) returns null, that's likely to break many pages.

>>>> Simply picking the last matching node is actually hiding a bug and 
>>>> letting it go unnoticed. (Why the last one? Why not the first, for 
>>>> example?)

All the tests I made up showed that the first was returned in all 
browsers I tested, including FF, IE, Opera, Safari and iCab.  None of 
them returned the last.

This is one of my test cases:

<!DOCTYPE html>
<script>
window.onload = function() {
document.getElementById("foo").appendChild(document.createTextNode("This 
One!"));
}
</script>
<p id="foo">1: </p>
<p id="foo">2: </p>

The result:
     * P id="foo"
           o #text: 1:
           o #text: This One!
     * #text:
     * P id="foo"
           o #text: 2:

-- 
Lachlan Hunt
http://lachy.id.au/
Received on Saturday, 18 March 2006 20:10:33 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 16:58:45 UTC