1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-27 17:22:42 +01:00
phorge-phorge/src/aphront
epriestley db1cd65866 Allow setup checks to perform writes
Summary:
Fixes T8198. Currently, if the `policy.locked` configuration setting includes a value which is a user PHID, we may perform a cache fill during setup as a side effect of validating it.

Right now, there is no WriteGuard active during setup, because we don't have a Request object yet so we can't actually perform CSRF validation.

Two possible approaches are:

  # Prevent the write from occuring.
  # Change the code to allow the write.

In the past, I think we've hit similar cases and done (1). However, IIRC those writes were sketchier, more isolated, and easy to remove (I think there was one with PKCS8 keys). This one is pretty legit and not very easy to remove without making a bit of a mess.

There's no techncial reason we can't do (2), we just have to create a no-op WriteGuard for the setup phase.

Test Plan:
  - To reproduce this issue: set some value in `policy.locked` to a user PHID, then wipe out profile caches in the database, then restart the webserver.
  - Reproduced the issue.
  - Added the new dummy write guard, fixed a minor issue with disposal semantics (see D12841).
  - Verified this fixed the issue.
  - Added a `throw` to the real CSRF validator and performed a real write. Verified I got CSRF-blocked.
  - Removed a CSRF token from a form and double-checked that CSRF protection still works.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T8198

Differential Revision: https://secure.phabricator.com/D12842
2015-05-14 10:39:28 -07:00
..
__tests__ Fix an issue where PHP puts the content type in CONTENT_TYPE instead of HTTP_CONTENT_TYPE 2013-11-11 12:17:34 -08:00
configuration Allow setup checks to perform writes 2015-05-14 10:39:28 -07:00
exception Apply some autofix linter rules 2014-09-10 06:55:05 +10:00
response Use __CLASS__ instead of hard-coding class names 2015-05-14 07:21:13 +10:00
sink Don't call flush() when emitting responses 2015-03-23 09:09:45 -07:00
AphrontController.php Decouple some aspects of request routing and construction 2014-10-17 05:01:40 -07:00
AphrontRequest.php Use __CLASS__ instead of hard-coding class names 2015-05-14 07:21:13 +10:00
AphrontURIMapper.php Remove @group annotations 2014-07-10 08:12:48 +10:00