-
Notifications
You must be signed in to change notification settings - Fork 236
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
Creative Rendering K Anon Tuple: Account for Bidding Logic Deployments With Less Disruption #679
Comments
Minor follow up that I believe I've guessed the answer to:
|
You're correct that the k-anon scope is (owner, biddingLogicURL, renderURL). And yeah I see how this might make updating the logic awkward. It's worth noting that it's only the URL that needs to stay the same — it's perfectly fine to have that URL load a new and different script! The reason that the biddingLogicURL needs to be part of this k-anon check is that the biddingLogicURL loads the script which contains not only the bidding JS but also the reporting JS. Basically, everything non-1p that feeds into Does this ability to change the script contents fix your concern about roll-out? It seems like owners of 3rd-party scripts are used to deploying new script contents under a fixed URL, since that's obviously essential if you hand your URL to a website to include in their site HTML somewhere you don't control. |
Hey Fwend, Understood that we can have the URL point to a different file, overwrite the previous file, or some such. And also get that the attack vector comes mostly, at least as far as I can tell, from the reporting function. As to the question of whether it fixes my concern: I suppose the short answer is no, but the better and longer answer would be "it does not in theory and I think it will constrain or impact deployments in important ways, I suspect that most of the time when immediate "swaps" are done for a script it's either an asset or something very simple, but anything with business critical logic, even UX side let alone auction side, let alone something like pricing logic, would typically want to do a phased rollout to mitigate risk, even if it's not exactly updating a version on every deploy...I do see this being an issue, but I don't at this exact instance feel like I can say you must fix this immediately, w/o more discussion internally". |
Hey @michaelkleber sorry silly thing I never wrote down here...if we decoupled the bidding and reporting function, or at least allowed that as an option, wouldn't updating the bid function, or to be more accurate versioning it, be much less problematic from a privacy attack vector standpoint? (maybe not quite 0 problematic). Could we even remove it from the k-tuple at that point? |
Yes, I think you're exactly right. |
Background
From the main doc, K Anon for URL Rendering is enforced not just on the creative but on the Tuple of (
owner
,biddingScriptUrl
, creative), where I'm going to guess "creative" would resolve to therenderURL
(so first question if someone can confirm that, although even if it wasad_render_id
the issue I'm thinking on would still apply).It's hard to say how frequently DSPs will want to deploy their bidding logic, as the frequency will likely be related to how much logic they decide to put into the bidding and reporting functions. One possibility we're exploring would be to try to keep the bidding function itself pretty "dumb", but I'm not sure we'll succeed in that; at this point I haven't thought of much logic to put into the buyer reporting function, seller reporting I think there may be some price resolution, but that doesn't impact frequency of change of the
biddingLogicUrl
.But, however frequently they do deploy, it's possible, likely even, they will want to do some versioning with multiple versions in prod, or prod/staging/whatever, to ensure compatibility things like:
IG.userBiddingSignals
structure is compatible with a new version of generateBid.Deployment setups could include something where the version doesn't change often, is part of an app config, and so is not changing on every DSP Contextual Bidder deployment; but it could also be that you want to have your "Contextual Bidder App" line up with your "PaAPI Bidding App" and so desire that there be new version on every deploy. That isn't necessary, but I can see reasons teams might want to do that, in which case unrelated deploys would result in changes to the tuple.
Also let's say a deployment can be anywhere from minutes to hours.
Challenge
The challenge I'm seeing here is that a deployment that resulted in a new
biddingLogicUrl
would result in a reset of K for all creatives coming from that DSP, including ones with no change, meaning each Creative now has to get back to K again. With K currently at 50, this means the first 49 winning bids for that creative will be bypassed.Trying to get a sense of the impact of that I took a simple/imperfect proxy, looking at the number of distinct creatives vs number of imps in an hour, and also the creative count * 49 since that is the number of wins that creative would have to go through to start displaying again. The numbers vary between 2.7% and 3.7% (see query below with some numbers "redacted" that I can share if need be).
Again, this isn't precise but is just meant to be directionally indicative of the issue.
Finally, I can imagine a fun theoretical that is unlikely in practice: if a
biddingLogicUrl
version was to be instantly deployed across all Interest Groups (i.e. dsp.com/bidding-1.0 --> dsp.com/bidding-1.1) then nothing would serve as nothing would hit K for a while. (In this case you could just deploy to the same URL, but might not want to, or be able to b/c maybe there's a prod and staging version)."Proposal"
I'm not sure exactly what to do here. I was initially going to say have the K-Anon process allow a version parameter in the
biddingLogicUrl
and constrain that parameter to be an integer less than something, but I can certainly see how that opens up attacks. I don't know if we could allow for k-anon to be done on thebiddingLogicUrl
itself and then have that combined with an (owner
,renderUrl
) tuple, so the two both have to be k-anon but independently.So, I've been thinking about this way too long, maybe I'm missing something obvious and I'll face palm, but for now I'll just say "I'd like to see a way for deployments of bidding logic to be less disruptive to creative K measurement" and for now I'll say "let's just add a small'ish integer query param that will be ignored for the creative K tuple.
Data
The text was updated successfully, but these errors were encountered: