feat(saas): enforce strict response policy
req: security/006 req: operations/006 req: operations/008
This commit is contained in:
@@ -102,13 +102,29 @@ fn ready_fingerprint(response: &str) -> &str {
|
||||
|
||||
#[test]
|
||||
fn authenticated_project_mutation_is_atomic_and_survives_restart() {
|
||||
// test req: auth/001 req: auth/002 req: auth/004 req: security/004 req: operations/001 req: v1_release/003
|
||||
// test req: auth/001 req: auth/002 req: auth/004 req: security/004 req: security/006
|
||||
// test req: security/009 req: operations/001 req: operations/006 req: v1_release/003
|
||||
let address = available_address();
|
||||
let origin = format!("http://{address}");
|
||||
let store = test_path("durable");
|
||||
|
||||
{
|
||||
let _app = start(&address, &store);
|
||||
let home = request(&address, "GET", "/", &[], "");
|
||||
let csp = response_header(&home, "content-security-policy");
|
||||
assert!(csp.contains("default-src 'self'"), "{csp}");
|
||||
assert!(csp.contains("script-src 'self'"), "{csp}");
|
||||
assert!(csp.contains("object-src 'none'"), "{csp}");
|
||||
assert!(csp.contains("form-action 'self'"), "{csp}");
|
||||
assert!(!csp.contains("unsafe-inline"), "{csp}");
|
||||
assert!(!csp.contains("unsafe-eval"), "{csp}");
|
||||
assert_eq!(response_header(&home, "x-content-type-options"), "nosniff");
|
||||
assert_eq!(
|
||||
response_header(&home, "referrer-policy"),
|
||||
"strict-origin-when-cross-origin"
|
||||
);
|
||||
assert!(!home.contains("<script>"));
|
||||
assert!(!home.contains("javascript:"));
|
||||
let live = request(&address, "GET", "/health/live", &[], "");
|
||||
assert!(live.starts_with("HTTP/1.1 200"), "{live}");
|
||||
assert!(live.contains("{\"status\":\"live\"}"), "{live}");
|
||||
@@ -242,7 +258,7 @@ fn authenticated_project_mutation_is_atomic_and_survives_restart() {
|
||||
|
||||
#[test]
|
||||
fn failed_durable_commit_rolls_back_visible_state() {
|
||||
// test req: failure/004 req: operations/002 req: v1_release/003
|
||||
// test req: failure/004 req: operations/002 req: operations/007 req: operations/008 req: v1_release/003
|
||||
let address = available_address();
|
||||
let origin = format!("http://{address}");
|
||||
let store = test_path("rollback");
|
||||
|
||||
Reference in New Issue
Block a user