#24496: Check CSRF Referer against CSRF_TRUSTED_ORIGINS
------------------------------+------------------------------------
     Reporter:  mattrobenolt  |                    Owner:  joshkehn
         Type:  New feature   |                   Status:  assigned
    Component:  CSRF          |                  Version:  master
     Severity:  Normal        |               Resolution:
     Keywords:  csrf          |             Triage Stage:  Accepted
    Has patch:  1             |      Needs documentation:  0
  Needs tests:  0             |  Patch needs improvement:  0
Easy pickings:  0             |                    UI/UX:  0
------------------------------+------------------------------------

Comment (by carljm):

 Replying to [comment:21 joshkehn]:
 > Right, my question was with `CSRF_TRUSTED_ORIGINS` explicitly set
 wouldn't someone reasonably assume that it's a filter on top of
 `CSRF_COOKIE_DOMAIN`?
 >
 > Example: Set `CSRF_COOKIE_DOMAIN` to `.example.com` for convenience of
 configuration so that the cookie is shared among any subdomain. Set
 `CSRF_TRUSTED_ORIGINS` to only allow certain referers to pass the CSRF
 checks.
 >
 > My suggestion would be to only use `CSRF_COOKIE_DOMAIN` if
 `CSRF_TRUSTED_ORIGINS` is empty and make that a separate branch of logic.

 It's a reasonable point, but I don't think so. Any host you are willing to
 share the CSRF cookie with is implicitly trusted to make use of it.
 Sharing the cookie is actually already a much deeper level of trust than
 that provided by CSRF_TRUSTED_ORIGINS alone, because it allows that host
 to get past both parts of the CSRF check, referrer and token.
 CSRF_TRUSTED_ORIGINS is a technique for adding _additional_ hosts who can
 bypass the referrer check, it's not a mechanism for restriction.

 With your proposed behavior, it would be impossible to both have many
 wildcarded subdomains AND an external CORS-using host. That would be
 pretty frustrating.

 Certainly the interaction of the two settings should be documented
 clearly.

 > Carl, I'm not sure if there's an easy way to split out into a new
 ticket. Do you have one? If not, I can manually do it a bit later today.

 No, there's no secret technique for that. Shouldn't be too hard; I
 wouldn't try to copy all the comments or anything. Just open a new ticket
 and say "some previous discussion in #24496", and re-title your pull
 request so it gets linked up with the new ticket.

--
Ticket URL: <https://code.djangoproject.com/ticket/24496#comment:22>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/070.c221c2aaead6ce57870b0e514324130f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to