Skip to content

Commit 1508028

Browse files
committed
Remove prefetch-src and update test cases.
As per w3c/webappsec-csp#582, prefetch-src has now been deprecated.
1 parent 1af73bc commit 1508028

File tree

2 files changed

+16
-32
lines changed

2 files changed

+16
-32
lines changed

src/lib.rs

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,10 @@ pub enum Destination {
387387
Document,
388388
Embed,
389389
Font,
390+
Frame,
391+
IFrame,
390392
Image,
393+
Json,
391394
Manifest,
392395
Object,
393396
PaintWorklet,
@@ -398,6 +401,7 @@ pub enum Destination {
398401
Style,
399402
Track,
400403
Video,
404+
WebIdentity,
401405
Worker,
402406
Xslt,
403407
}
@@ -412,7 +416,7 @@ impl Destination {
412416

413417
/**
414418
response to be validated
415-
419+
416420
https://fetch.spec.whatwg.org/#concept-response
417421
*/
418422
#[derive(Clone, Debug)]
@@ -444,7 +448,7 @@ pub enum ViolationResource {
444448
Inline {
445449
report_sample: bool,
446450
},
447-
}
451+
}
448452

449453
/**
450454
Many algorithms are allowed to return either "Allowed" or "Blocked".
@@ -593,16 +597,6 @@ impl Directive {
593597
}
594598
Allowed
595599
}
596-
"prefetch-src" => {
597-
let name = get_the_effective_directive_for_request(request);
598-
if !should_fetch_directive_execute(name, "prefetch-src", policy) {
599-
return Allowed;
600-
}
601-
if SourceList(&self.value[..]).does_request_match_source_list(request) == DoesNotMatch {
602-
return Blocked;
603-
}
604-
Allowed
605-
}
606600
"object-src" => {
607601
let name = get_the_effective_directive_for_request(request);
608602
if !should_fetch_directive_execute(name, "object-src", policy) {
@@ -666,7 +660,7 @@ impl Directive {
666660
}
667661
Allowed
668662
}
669-
_ => Allowed,
663+
_ => Allowed,
670664
}
671665
}
672666
/// https://www.w3.org/TR/CSP/#directive-post-request-check
@@ -759,17 +753,6 @@ impl Directive {
759753
}
760754
Allowed
761755
}
762-
"prefetch-src" => {
763-
let name = get_the_effective_directive_for_request(request);
764-
if !should_fetch_directive_execute(name, "prefetch-src", policy) {
765-
return Allowed;
766-
}
767-
let source_list = SourceList(&self.value);
768-
if source_list.does_response_to_request_match_source_list(request, response) == DoesNotMatch {
769-
return Blocked;
770-
}
771-
Allowed
772-
}
773756
"object-src" => {
774757
let name = get_the_effective_directive_for_request(request);
775758
if !should_fetch_directive_execute(name, "object-src", policy) {
@@ -1065,7 +1048,6 @@ fn get_fetch_directive_fallback_list(directive_name: &str) -> &'static [&'static
10651048
"worker-src" => &["worker-src", "child-src", "script-src", "default-src"],
10661049
"connect-src" => &["connect-src", "default-src"],
10671050
"manifest-src" => &["manifest-src", "default-src"],
1068-
"prefetch-src" => &["prefetch-src", "default-src"],
10691051
"object-src" => &["object-src", "default-src"],
10701052
"frame-src" => &["frame-src", "child-src", "default-src"],
10711053
"media-src" => &["media-src", "default-src"],
@@ -1083,19 +1065,21 @@ fn get_the_effective_directive_for_request(request: &Request) -> &'static str {
10831065
return "connect-src";
10841066
}
10851067
if request.initiator == Prefetch || request.initiator == Prerender {
1086-
return "prefetch-src";
1068+
return "default-src";
10871069
}
10881070
match request.destination {
10891071
Manifest => "manifest-src",
10901072
Object | Embed => "object-src",
1091-
Document => "frame-src",
1073+
Frame | IFrame => "frame-src",
10921074
Audio | Track | Video => "media-src",
10931075
Font => "font-src",
10941076
Image => "img-src",
10951077
Style => "style-src-elem",
1096-
Script | Xslt => "script-src-elem",
1078+
Script | Xslt | AudioWorklet | PaintWorklet => "script-src-elem",
10971079
ServiceWorker | SharedWorker | Worker => "worker-src",
1098-
_ => "",
1080+
Json | WebIdentity => "connect-src",
1081+
Report => "",
1082+
_ => "connect-src",
10991083
}
11001084
}
11011085

tests/examples.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,19 +342,19 @@ test_should_request_be_blocked!{
342342
url: "https://www.evil.com/worker.js",
343343
origin: "https://www.notriddle.com",
344344
policy: "child-src https://www.notriddle.com/",
345-
dest: Document,
345+
dest: Worker,
346346
result: Blocked),
347347
( name: pre_request_child_src_document_data_block,
348348
url: "data:application/javascript,xssattack",
349349
origin: "https://www.notriddle.com",
350350
policy: "child-src https://www.notriddle.com/",
351-
dest: Document,
351+
dest: Worker,
352352
result: Blocked),
353353
( name: pre_request_child_src_document_none_block,
354354
url: "https://www.notriddle.com/worker.js",
355355
origin: "https://www.notriddle.com",
356356
policy: "child-src 'none'",
357-
dest: Document,
357+
dest: Worker,
358358
result: Blocked),
359359
}
360360

0 commit comments

Comments
 (0)