To expand on my comments around fullscreen with a more concrete example, 
the current prototype within Chrome allows for invoking an element into 
fullscreen in a sandboxed frame with the `allow=fullscreen` feature policy. 
This is not too dissimilar to the existing possibility of using an onclick 
handler. Consider the following:

```html
<iframe sandbox="allow-scripts" allow="fullscreen">
  <html id="invokee">
    <button invoketarget="invokee" invokeaction="toggleFullscreen">Invoke</
button> 
    <button onclick="invokee.requestFullscreen()">Go fullscreen</button>
  </html>
</iframe>
```

In the above example both the `<button onclick>` and `<button 
invoketarget>` will fullscreen the iframe. Removing `allow=fullscreen` will 
mean this buttons cannot fullscreen the iframe. Changing 
`sandbox=allow-scripts` to `sandbox` will disable scripting, and so the 
`<button oncllick>` will no longer work, but `<button invoketarget>` will 
(provided `allow=fullscreen` is still present). Given these buttons require 
user activation (invoke defaults are only triggered from trusted user 
activation) I believe the risk is sufficiently low with these safeguards in 
place.

For any other questions around security, perhaps we could coalesce the 
discussion here: https://github.com/openui/open-ui/issues/904 where the 
proposal is incubating to get the right feedback from the proposing team?
On Tuesday, 7 November 2023 at 09:49:48 UTC Keith Cirkel wrote:

> I appreciate the concern, and there have been several discussions around 
> the topic (though not formally through issues). Of particular note is that 
> much of this proposal isn't doing anything "new" in as much as it is 
> bringing together multiple functions under one umbrella attribute, as I'll 
> try to break down:
>
>  - Invoketarget could be considered a superset of `popovertarget`, as it 
> houses the same functionality of that attribute plus more. I think 
> invoketarget should be treated similarly for the same cases (targeting a 
> popover). JavaScript is not needed in these scenarios. My understanding of 
> the discussions around popover is that it did not bring significant new 
> risk to the platform to warrant opt-in flags or to add new security 
> primitives (such as a CSP header) as it stands today.
>  - invoketarget also has the capability to open dialogs. These are 
> effectively the same as popovers in that it will promote an element to the 
> top layer, but dialogs have the addition that they can focus trap. 
> Personally I don't consider the act of focus trapping to add additional 
> risk (a user is always able to escape the focus trap by pressing the escape 
> key or equivalent gesture), so I would bucket this in the same context as 
> popovertarget.
>  - invoketarget has the ability to fullscreen an element. This is perhaps 
> the riskiest area, and allowing unrestricted access to fullscreen elements 
> would definitely be of concern. Care should be taken here to ensure that 
> fullscreening has the same restrictions as `requestFullScreen`; if a 
> `requestFullScreen` call would fail then so should an invoke.
>  - invoketarget also has the ability to control video playback. My 
> understanding is that this is possible using video player controls today, 
> where JavaScript is not needed, and so I don't consider this as an 
> escalation of ability either.
>  - invoketarget can open a <details> element. <summary> elements can also 
> do this today and JavaScript is not needed in these scenarios, so I don't 
> consider this an escalation of ability either.
>  - Aside from these, any other abilities would require scripting, and the 
> relevant CSP headers would suffice.
>
> My understanding is that most sanitizers such as DOMPurify and 
> sanitize-html are allow-list by default, and consequently would remove the 
> `invoketarget` attribute from any user generated content.
>
> Given the above I believe the risk to be low enough that I don't believe 
> an opt-in to this behaviour is warranted; the operations one can perform 
> without scripting are quite limited and in some cases possible today 
> through other means (popovertarget, <summary>). It may warrant an opt-out 
> via CSP. Perhaps if you would kindly raise an issue on whatwg/html to 
> around this we could discuss it further?
>
> On Fri, 3 Nov 2023, at 12:03 PM, Gijs Kruitbosch wrote:
>
> AIUI this effectively allows a website to declaratively do something that 
> would currently require JavaScript.
>
> Would these attributes be subject to CSP, sandboxing or specific HTML 
> sanitizer behaviour at all (and if so, in what way)? Because if not, I 
> imagine that these would potentially allow escalation of a website security 
> vulnerability from a markup injection to something approaching XSS - that 
> is, doing things on the vulnerable website that would require XSS without 
> implementation of this proposal. Or is that an accepted risk and/or are the 
> invoke targets/actions sufficiently underpowered that this was not deemed a 
> concern?
>
> ~ Gijs
>
> PS: Apologies if this got brought up in the spec or previous discussion, 
> but I was unable to find relevant keywords in any of the spec / pull / 
> explainer links. The explainer does acknowledge that inline JS is frowned 
> upon and often disabled via CSP, and that this is a more declarative 
> mechanism to do the same thing, but I couldn't find anything more than that.
>
>
>
> On 03/11/2023 00:30, Keith Cirkel wrote:
>
> *Summary*:
>   Adding invoketarget and invokeaction attributes to <button> and <input 
> type="button"> / <input type="reset"> elements would allow authors to 
> assign behaviour to buttons in a more accessible and declarative way, while 
> reducing bugs and simplifying the amount of JavaScript pages are required 
> to ship for interactivity. Buttons with invoketarget will - when clicked, 
> touched, or enacted via keypress - dispatch an InvokeEvent on the element 
> referenced by invoketarget, with some default behaviours.
>
> *Bug*:
>  https://bugzilla.mozilla.org/show_bug.cgi?id=1856430
>
> *Specification*:
>  https://github.com/whatwg/html/pull/9841
>
> *Standards Body*:
>   WHATWG
>
> *Platform coverage*:
>   all.
>
> *Preference*:
>   dom.element.invokers.enabled
>
> *DevTools bug*:
>  n/a.
>
> *Link to standards-positions discussion*:
>  https://github.com/mozilla/standards-positions/issues/902
>
> *Other browsers*:
>   Blink: Prototyping (
> https://groups.google.com/a/chromium.org/g/blink-dev/c/tDanwUCp2cg/m/IPc9hvHcFAAJ
> ).
>   WebKit: No Signal.
>
> *web-platform-tests*:
>   
> https://wpt.fyi/results/html/semantics/invokers?label=experimental&label=master&aligned
>
> --
> You received this message because you are subscribed to the Google Groups 
> "[email protected]" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/a/mozilla.org/d/msgid/dev-platform/3c383a64-c7d8-4ece-86e1-590fda1e27d9%40app.fastmail.com
>  
> <https://groups.google.com/a/mozilla.org/d/msgid/dev-platform/3c383a64-c7d8-4ece-86e1-590fda1e27d9%40app.fastmail.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"[email protected]" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/mozilla.org/d/msgid/dev-platform/7ceadf17-e86d-4fa0-966e-723aca814e42n%40mozilla.org.

Reply via email to