Skip to content

Runtime JavaScript visibility is out of scope — should it be? #1

Description

@KXXXXXXXK

Filed by the authors as an open question, not a bug report. v0.1 is published early so that questions like this get argued out in the open.

The limit as it stands

The definition states, as a known limit:

Visibility controlled by JavaScript at runtime is not evaluated

So a page that renders clean in static HTML and injects agent-directed text at runtime is, by the current text, not a finding — because we did not look.

Why it was left there

Evaluating runtime visibility means executing untrusted pages. That changes the cost, the attack surface, and the reproducibility of a verdict: two implementations running the same page through different engines, at different times, may legitimately disagree. A standard whose verdict depends on which headless browser you used is not mechanically decidable, which is the property the two-axis design exists to protect.

The open question

Three options, and we do not think the answer is obvious:

  1. Leave it out of scope, as now. Honest, reproducible, and blind to a real technique.
  2. Bring it in scope with a stated rendering profile — a named engine, a fixed viewport, a fixed timeout. Reproducible only to the extent that everyone adopts the same profile.
  3. A third verdict value. Report visibility: undetermined when a page's text content depends on script execution, in the same way external CSS is already handled — never escalating to hidden, but not silently reporting clean either.

Option 3 is closest to the existing treatment of unresolvable external CSS, and to the principle that reporting "nothing found" when you did not look is the worst failure mode available here. It also raises a question of its own: nearly every modern page runs script, so undetermined could end up on almost everything and mean nothing.

What would help

  • If you have implemented this: what did you do about runtime visibility, and did it produce false positives?
  • Is there a formulation of option 2 that stays reproducible across implementations?
  • Is there a narrower trigger for option 3 than "the page contains script"?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions