Primary eng (and PM) emails
Summary
I would like to remove "support" for the obsolete isindex element[1] from Blink. I put support in quotes because what we currently do with the tag is strange, and doesn't seem to actually support it's usage in the wild.
Usage information from UseCounter
I don't have UseCounter data (and it's nontrivial to get, since the replacement happens somewhere where we don't currently have easy access to the counter mechanism). Grepping for the text through Google's search index reveals minimal usage: 756 results total on 341 unique domains (this includes pages like [4] that merely mention the tag; the tool's syntax is strange, and I don't know how to filter those out).
Compatibility Risk
Firefox supports isindex in exactly the same way that Blink does. Pages that rely on this behavior will break. So far I haven't found any.
Row on feature dashboard?
Primary eng (and PM) emails
Summary
I would like to remove "support" for the obsolete isindex element[1] from Blink. I put support in quotes because what we currently do with the tag is strange, and doesn't seem to actually support it's usage in the wild.
MotivationCurrently, blink parses the isindex element by magically inserting a form and input element, along with some explanatory text (see HTMLTreeBuilder::processIsindexStartTagForInBody). This ends up looking like the "This is a searchable index. ..." at the top of [2], for example.Typing something into that field and submitting the form reloads the page with the search query appended as a query string. In my testing, this has correctly searched for something on exactly 0 pages.Given that the element is interpreted in a way that injects an unexpected form into a document, there is some non-trivial risk of a content injection attack making use of this element that probably isn't high on folks' lists of elements to filter[3]
Hi Kent, Daniel!I agree that our implementation is as-specified. I also agree that it matches Firefox, Safari, and probably IE. I've also skimmed through a number of the historical sites you're referring to, and haven't found any that reacted to a search driven through the injected form.You're also correct that the cost of support is minimal (~40 lines of code that haven't been touched in forever: https://codereview.chromium.org/96653004/). My motivation is neither ugliness nor maintenance, but "Hey, this unexpectedly injected a form into my page, bypassing my clever `s/<form//` regex protection!" Recent comments like https://twitter.com/0x6D6172696F/status/406006348577374208 bother me. :)
On Mon, 02 Dec 2013 10:03:09 +0100, Mike West <mk...@google.com> wrote:Recent comments like https://twitter.com/0x6D6172696F/status/406006348577374208 bother me. :)Unfortunately that one is protected, but I can imagine that <isindex> is mistreated somewhere on the web.
That tag is included as an especially interesting tag in several of the fuzzers I've seen and before Presto used the current HTML5 parser it wasn't unheard of that <isindex> triggered some bug. So I am familiar with the tag and I don't really like it, but I also think that standards are important and backwards compatibility is important.
I do wish that filterers learned to use whitelists of tags and attributes because the web will always evolve so making assumptions of what is the full dangerous set is never going to be safe for long.
(the clever regexp protection also fails to parse FORM and ForM btw. :-))
On Mon, 02 Dec 2013 09:22:37 +0100, Mike West <mk...@chromium.org> wrote:Primary eng (and PM) emails
Summary
I would like to remove "support" for the obsolete isindex element[1] from Blink. I put support in quotes because what we currently do with the tag is strange, and doesn't seem to actually support it's usage in the wild.
MotivationCurrently, blink parses the isindex element by magically inserting a form and input element, along with some explanatory text (see HTMLTreeBuilder::processIsindexStartTagForInBody). This ends up looking like the "This is a searchable index. ..." at the top of [2], for example.Typing something into that field and submitting the form reloads the page with the search query appended as a query string. In my testing, this has correctly searched for something on exactly 0 pages.Given that the element is interpreted in a way that injects an unexpected form into a document, there is some non-trivial risk of a content injection attack making use of this element that probably isn't high on folks' lists of elements to filter[3]This sounds like it's doing what it should do.<isindex> is the predecessor of web forms and pretty ugly, and mostly just exists on historical sites from mid 90s. Those are not very many but they might still be of interest.Even if it's in the obsolete section of the HTML specification, it's still in the HTML standard. I don't think it's setting a good precedent to go around dropping support for various parts of the HTML standard just because we think they are ugly.
If I recall correctly the cost of supporting <isindex> is also very low since it just expands in the parser and no other part of the browser code needs to care about it./Daniel
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
But "break the web" is not a boolean. No browser supports 100% of the web, and they are not even supporting the same subset of the web. To make it possible for web developers to have a chance at writing pages and systems we agree on standards, like the HTML standards. If a web developer keeps to features described there is a fairly high chance that web browsers will support that content now and in the future. It's like our promise to the web developers.I object to this line of reasoning.
Many specs include "obsolete" or "conditionally normative" sections to denote how UAs must behave >IF they implement uncommon features. These sections create no additional duty to support features, >We should feel free to remove support to the extent that we think it won't break the web.
I can understand that people weigh costs in the case of features like XSLT (not one of the core standards like CSS, HTML, HTTP), with a bad implementation in chromium, not that high usage and with a maintenance cost that is noticeable by the people working on the code, but this is an HTML feature, included in every HTML specification since the early days of W3C, with a negligible maintenance cost.
But "break the web" is not a boolean. No browser supports 100% of the web, and they are not even supporting the same subset of the web. To make it possible for web developers to have a chance at writing pages and systems we agree on standards, like the HTML standards. If a web developer keeps to features described there is a fairly high chance that web browsers will support that content now and in the future. It's like our promise to the web developers.I object to this line of reasoning.
Many specs include "obsolete" or "conditionally normative" sections to denote how UAs must behave >IF they implement uncommon features. These sections create no additional duty to support features, >We should feel free to remove support to the extent that we think it won't break the web.
I can understand that people weigh costs in the case of features like XSLT (not one of the core standards like CSS, HTML, HTTP), with a bad implementation in chromium, not that high usage and with a maintenance cost that is noticeable by the people working on the code, but this is an HTML feature, included in every HTML specification since the early days of W3C, with a negligible maintenance cost.
But, if we UseCounter it and find that it is pretty much unused, then the benefit to keeping it is also low. It's hard to measure to maintenance cost of a feature. In and of itself, it doesn't present much of a cost, but 100 such minor features do.
In either case, I don't think we should do anything with isindex without a UseCounter showing that the usage is very low.
Google index files say <isindex> is used 0.000011% of pages as of December 2, 2013.-yosi
As an additional data point, I was just informed that Blink's XSS Auditor misses isindex-based vectors (which makes sense, as I think that the tag's magical behavior means that 'isindex' never appears in the token stream that the auditor sees (+tsepez: Hi!)).
If we can't get this right as a browser vendor, I don't imagine that developers will have much better luck. These are the sorts of things that make me question the claim that the tag "does no harm".Thank you all for the discussion. I've added a usage counter in http://crrev.com/98743002; I'll circle back to this thread in a few weeks when I have more complete data to present.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
On Mon, 24 Feb 2014, Mike West wrote:What exactly is it you want to remove? The parser entry for "isindex"
>
> It's been a few weeks. M33 finally (finally!) hit stable. <isindex> is
> showing up in about 0.0049% of page loads.
>
> I'd still like to remove it.
start tags? Parts of the form submission logic? Something else?
Primary eng (and PM) emails
Summary
I would like to remove "support" for the obsolete isindex element[1] from Blink. I put support in quotes because what we currently do with the tag is strange, and doesn't seem to actually support it's usage in the wild.
MotivationCurrently, blink parses the isindex element by magically inserting a form and input element, along with some explanatory text (see HTMLTreeBuilder::processIsindexStartTagForInBody). This ends up looking like the "This is a searchable index. ..." at the top of [2], for example.Typing something into that field and submitting the form reloads the page with the search query appended as a query string. In my testing, this has correctly searched for something on exactly 0 pages.Given that the element is interpreted in a way that injects an unexpected form into a document, there is some non-trivial risk of a content injection attack making use of this element that probably isn't high on folks' lists of elements to filter[3]
Usage information from UseCounter
I don't have UseCounter data (and it's nontrivial to get, since the replacement happens somewhere where we don't currently have easy access to the counter mechanism). Grepping for the text through Google's search index reveals minimal usage: 756 results total on 341 unique domains (this includes pages like [4] that merely mention the tag; the tool's syntax is strange, and I don't know how to filter those out).
Compatibility Risk
Firefox supports isindex in exactly the same way that Blink does. Pages that rely on this behavior will break. So far I haven't found any.
Row on feature dashboard?
No.WDYT?-mike
--
You received this message because you are subscribed to the Google Groups "blink-dev" group.