A secret that can only be replaced atomically cannot be rotated without coordinating a deploy on somebody else’s system. The multi-value header is the arrangement every large provider…
A shared database with a single application user has no boundaries at all, whatever the code layout suggests. Separating the migration user from the application user is the…
A deletion request does not override a legal obligation to keep invoices, so the answer is per table rather than global. The anonymised row keeping its identifier is…
The default token has write access to most of the repository, and declaring a permissions block switches the job to exactly what is listed. Declaring it at the…
Custom authentication for the REST API hooks a filter that runs before most of WordPress is loaded, which constrains what is available inside it. Returning early when a…
An admin panel on the same hostname as the customer site shares a cookie namespace, a rate limit and a cross-site scripting blast radius. A cookie scoped to…
For anything with personal or financial data, who looked at it is a question that gets asked, and a write-only audit log cannot answer it. Recording a list…
2.4 in August adds an audit command that checks the lock file against the Packagist advisory database, which several separate tools had been doing. Reading the lock file…