-
Notifications
You must be signed in to change notification settings - Fork 176
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Permission policy system after the OT #558
Comments
Thanks @alois-bissuel for filing. I chatted with @clelland about this briefly in TPAC because it seems like a legitimate concern. Let me summarize how I am thinking about this:
After thinking about it for a bit I thought of a potential middle ground policy we might want to consider: a way for frames to set a policy on a child and allow it to recursively propagate:
Concretely, the recursively allowed features would be inherited by a subframe, and also propagated to that subframe’s children (and so on). Possibly, it could also be applied to documents the frame navigates to e.g. in redirects? The biggest challenge with a relaxed permission like this is that it could be surprising to a frame not expecting a recursive permission to be applied (e.g. one that embeds untrusted content). To prevent security issues from silently propagating permissions, we would need to ensure that frames understand what is happening and what their recursive policy is, e.g. via HTTP headers or JS accessors. They should similarly be able to revoke the recursive policy with those same mechanisms (response headers, JS API). Anyway, I’m still not sure how I feel about a proposal like this but I’d be curious to understand if it would solve the issues you mentioned, @alois-bissuel. My thinking is that this is strictly better than a default of (b) is a strict subset of (a), so we'd be reducing the number of parties needing to explicitly opt-out. cc @maudnals |
Thanks for the detailed answer. |
with (a) I am not sure if it is true that default * requires all frames to opt-out if they don't want children to use the API. My understanding is the opt-out with header is recursive in nature. For example, if a publisher opt-out with header Permissions-Policy: attribution-reporting=(), the API is disabled on the publisher's document as well as any child frame. (b) self + "allow-recursive" basically turn any nested frames into the case of (a). It does provide some flexibility for publisher to opt-in itself and the frames they truest but disable the API on the others. |
I just want to chime in here to echo the concern with the existing permissions policy behavior. As mentioned, there can be an entire chain of iframe ancestors owned by parties who may be 1) unknown, 2) ephemeral, 3) unwilling or uninterested in propagating permissions downstream, against the preferences of the top-level site owner. Although in reading these permissions-policy docs, it reads like even if the default policy is attribution-reporting=*, we would still need allow="attribution-reporting" on every iframe in order to actually propagate that permission. Is that accurate to the current state of the OT? Similarly, if post-OT, a publisher were to mark their top-level page with Permissions-Policy: attribution-reporting=*, would that setting also be limited by a lack of allow attributions on containing iframes? Or, for a more targeted example, if publisher.com explicitly wants to allow a particular buyer (partneradtech.com) to measure on its domain, even when intermediary sellers are involved, there's no way to do that. If publisher.com returns headers Permissions-Policy: attribution-reporting=(partneradtech.com), partneradtech.com iframes would still only have permission if running as a direct child of the top page. Otherwise any intermediary iframes without allow attributes on them would block this permission propagation. Is that correct? |
The scenario where the publisher has no policy and the embedded frame does not want to propagate permission, the
Yeah I agree with that, it's a good framing.
This is not the behavior of the current OT, as a default value of That being said, your understanding is correct if the default is moved to
That's correct if the default is moved to |
Ah, so I think the part that I missed here is that there is a difference between a default value of |
Good to know and it would be great to get confirmation, as I was definitely confused here. Ok, so then with this understanding, I think if |
@jfggit I understand it is a large migration from the status-quo to use That being said, I agree that it isn't a perfect solve that gives as much coverage as our existing default |
I am not sure this is correct. I believe, with default as '*', permissions-policy: attribution-reporting=() is sufficient to disable the feature for all nested frames. I made an example at https://attribution-permission-policy.glitch.me/?disable By removing '?disable' you can see all nested frames has the feature enabled without 'allow' attribute which indicates the defualt '*' is in use. Appending the '?disable' introduces the permissions-policy: attribution-reporting=() header in the response to the top document, and it effectively disables the feature in all nested frames without the frame to act individually. |
Yes that's true. I would consider that a case where the publisher has a policy though, right? I was describing a case where the pub does nothing. |
There's a kind of use-case gap with the |
It originally sort-of-did that, or at least the header could be used to automatically apply those bits to child frames by origin. We changed that a few years ago, in order to make it possible to absolutely block any origin (including your own) from the header (w3c/webappsec-permissions-policy#357) |
To be clear, does that then preclude re-adding such a mechanism, or otherwise implementing it in a non-conflicting way? @clelland @csharrison |
I'll speak to the same at the CG meeting, but my biggest concern here is that an I think that if we were to try something like this, it would need to be a feature-specific addition (or a flag that could be set on specific features, initially just this one), and it might need to be scoped to specific origins. That is, maybe you can't set it to |
Any thoughts on how we could make it visible, like the ideas in the original comment:
This doesn't fully solve the problem but seems like a decent mitigation.
I am 100% with you on making this feature-specific (or a flag on specific features). I am not interested in changing the behavior of all other features. I might only expect some ads-specific features (e.g. Topics) that share the same use case of depending on an ecosystem of nested iframes to want this.
I can see the appeal of this, but I wonder how doable it would be in practice. This will be a good discuss to ask the group in today's meeting, but I can imagine this having issues if the SSP does not have full information about the final |
Summarizing the discussion from Jan 23
Let me know if I missed something major. I'll try to synthesize some of these points into a path forward. |
The Permission Policy requirement for cross-domain iframe would require large scale advertiser and publisher outreach to enable the APIs in the cross-domain context. In general for buyside Adtech, driving publisher outreach is a challenge because the direct customer relationship is with the advertiser, not the publisher. When advertisers work with publishers it is typically around ad trafficking changes, not site permissioning. Scale can be another challenge for outreach. Buyside AdTech can easily have ad tags deployed to thousands of publishers which makes the scale of outreach to all but a top handful of publishers challenging. Multiple ad techs and measurement providers can interact with a given ad slot, which also complicates ensuring that policies are updated correctly for all parties so that consistent measurement is possible. Furthermore, Publishers would likely no longer be able to accurately measure the impact of their media due to some advertisers not having turned this on which might limit the effectiveness of the APIs for the ecosystem. The current proposal to enable cross domain iframe support by default for publishers and advertisers would simplify and streamline adoption of the Attribution Reporting APIs. We also believe that easy opt outs for those who don't want to participate strikes the right balance between building an effective privacy preserving APIs and giving partners the right choice of controls over the API usage. |
After all the previous discussions, I feel a default permission policy of
As such, I am proposing we stick with default That being said, I’m still interested in investigating possible improvements to the permission system (e.g. refining the |
Hello,
During the OT, the permission policy system has been lifted for easier testing (#551, see our related ask in #519 and in the ps-dev-support).
I am now wondering about the end state of the API if it graduates after the OT.
If the permission policy system is to be kept as is (ie the standard delegation system), there is a high probability that some of our inventory won't have access to the API. Ads may be rendered in nested iFrames dropped by transient actors (eg for AB-testing or other purposes), who may not delegate the permission.
Do you see any solution to this kind of issue?
P.S. Linking #393 as it already lists various arguments for the default permission policy.
The text was updated successfully, but these errors were encountered: