Skip to content
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

DOCS Upgrading 3.x docs on session stage param #8214

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
33 changes: 33 additions & 0 deletions docs/en/04_Changelogs/3.7.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,39 @@ class Page_Controller extends ContentController
other layers such as Apache's mod_gzip.
<!--- Changes below this line will be automatically regenerated -->

## Disable session-based stage setting

When viewing a versioned record (usually pages) in "draft" mode,
SilverStripe records this mode in the session for further requests.
This has the advantage of transparently working on XHR and API requests,
as well as authenticated users navigating through other views.

These subsequent requests no longer carried an explicit `stage` query parameter,
which meant the same URL might show draft or live content depending on your session state.
While most HTTP caching layers deal gracefully with this variation by disabling
any caching when a session cookie is present, there is a small chance
that draft content is exposed to unauthenticated users for the lifetime of the cache.

Due to this potential risk for information leakage,
we have decided to only rely on the `stage` query parameter starting with SilverStripe 4.2.
In SilverStripe 3.x, you can opt-in to this behaviour as well:

```yml
SilverStripe\Versioned\Versioned:
use_session: false
```

If you are consistently using the built-in `SiteTree->Link()`
and `Controller->Link()` methods to get URLs, this change likely won't affect you.

If you are manually concatenating URLs to SilverStripe controllers
rather than through their `Link()` methods (in custom PHP or JavaScript),
or have implemented your own `Link()` methods on controllers exposing
versioned objects, you'll need to check your business logic.

Check our [versioning docs](/developer_guides/model/versioning#controllers)
for more details.

## Change Log

### Security
Expand Down