Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp

Issue 2480303002: CSP3: Implement 'worker-src'. (Closed)
Patch Set: feedback Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google, Inc. All rights reserved. 2 * Copyright (C) 2011 Google, Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 const char ContentSecurityPolicy::ScriptSrc[] = "script-src"; 85 const char ContentSecurityPolicy::ScriptSrc[] = "script-src";
86 const char ContentSecurityPolicy::StyleSrc[] = "style-src"; 86 const char ContentSecurityPolicy::StyleSrc[] = "style-src";
87 87
88 // CSP Level 2 Directives 88 // CSP Level 2 Directives
89 const char ContentSecurityPolicy::BaseURI[] = "base-uri"; 89 const char ContentSecurityPolicy::BaseURI[] = "base-uri";
90 const char ContentSecurityPolicy::ChildSrc[] = "child-src"; 90 const char ContentSecurityPolicy::ChildSrc[] = "child-src";
91 const char ContentSecurityPolicy::FormAction[] = "form-action"; 91 const char ContentSecurityPolicy::FormAction[] = "form-action";
92 const char ContentSecurityPolicy::FrameAncestors[] = "frame-ancestors"; 92 const char ContentSecurityPolicy::FrameAncestors[] = "frame-ancestors";
93 const char ContentSecurityPolicy::PluginTypes[] = "plugin-types"; 93 const char ContentSecurityPolicy::PluginTypes[] = "plugin-types";
94 94
95 // CSP Editor's Draft: 95 // CSP Level 3 Directives
96 // https://w3c.github.io/webappsec/specs/content-security-policy
97 const char ContentSecurityPolicy::ManifestSrc[] = "manifest-src"; 96 const char ContentSecurityPolicy::ManifestSrc[] = "manifest-src";
97 const char ContentSecurityPolicy::WorkerSrc[] = "worker-src";
98 98
99 // Mixed Content Directive 99 // Mixed Content Directive
100 // https://w3c.github.io/webappsec/specs/mixedcontent/#strict-mode 100 // https://w3c.github.io/webappsec/specs/mixedcontent/#strict-mode
101 const char ContentSecurityPolicy::BlockAllMixedContent[] = 101 const char ContentSecurityPolicy::BlockAllMixedContent[] =
102 "block-all-mixed-content"; 102 "block-all-mixed-content";
103 103
104 // https://w3c.github.io/webappsec/specs/upgrade/ 104 // https://w3c.github.io/webappsec/specs/upgrade/
105 const char ContentSecurityPolicy::UpgradeInsecureRequests[] = 105 const char ContentSecurityPolicy::UpgradeInsecureRequests[] =
106 "upgrade-insecure-requests"; 106 "upgrade-insecure-requests";
107 107
(...skipping 10 matching lines...) Expand all
118 equalIgnoringCase(name, DefaultSrc) || equalIgnoringCase(name, FontSrc) || 118 equalIgnoringCase(name, DefaultSrc) || equalIgnoringCase(name, FontSrc) ||
119 equalIgnoringCase(name, FrameSrc) || equalIgnoringCase(name, ImgSrc) || 119 equalIgnoringCase(name, FrameSrc) || equalIgnoringCase(name, ImgSrc) ||
120 equalIgnoringCase(name, MediaSrc) || equalIgnoringCase(name, ObjectSrc) || 120 equalIgnoringCase(name, MediaSrc) || equalIgnoringCase(name, ObjectSrc) ||
121 equalIgnoringCase(name, ReportURI) || equalIgnoringCase(name, Sandbox) || 121 equalIgnoringCase(name, ReportURI) || equalIgnoringCase(name, Sandbox) ||
122 equalIgnoringCase(name, ScriptSrc) || equalIgnoringCase(name, StyleSrc) || 122 equalIgnoringCase(name, ScriptSrc) || equalIgnoringCase(name, StyleSrc) ||
123 equalIgnoringCase(name, BaseURI) || equalIgnoringCase(name, ChildSrc) || 123 equalIgnoringCase(name, BaseURI) || equalIgnoringCase(name, ChildSrc) ||
124 equalIgnoringCase(name, FormAction) || 124 equalIgnoringCase(name, FormAction) ||
125 equalIgnoringCase(name, FrameAncestors) || 125 equalIgnoringCase(name, FrameAncestors) ||
126 equalIgnoringCase(name, PluginTypes) || 126 equalIgnoringCase(name, PluginTypes) ||
127 equalIgnoringCase(name, ManifestSrc) || 127 equalIgnoringCase(name, ManifestSrc) ||
128 equalIgnoringCase(name, WorkerSrc) ||
128 equalIgnoringCase(name, BlockAllMixedContent) || 129 equalIgnoringCase(name, BlockAllMixedContent) ||
129 equalIgnoringCase(name, UpgradeInsecureRequests) || 130 equalIgnoringCase(name, UpgradeInsecureRequests) ||
130 equalIgnoringCase(name, TreatAsPublicAddress) || 131 equalIgnoringCase(name, TreatAsPublicAddress) ||
131 equalIgnoringCase(name, RequireSRIFor)); 132 equalIgnoringCase(name, RequireSRIFor));
132 } 133 }
133 134
134 bool ContentSecurityPolicy::isNonceableElement(const Element* element) { 135 bool ContentSecurityPolicy::isNonceableElement(const Element* element) {
135 if (!element->fastHasAttribute(HTMLNames::nonceAttr)) 136 if (!element->fastHasAttribute(HTMLNames::nonceAttr))
136 return false; 137 return false;
137 138
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 case WebURLRequest::RequestContextFavicon: 838 case WebURLRequest::RequestContextFavicon:
838 case WebURLRequest::RequestContextImage: 839 case WebURLRequest::RequestContextImage:
839 case WebURLRequest::RequestContextImageSet: 840 case WebURLRequest::RequestContextImageSet:
840 return allowImageFromSource(url, redirectStatus, reportingStatus); 841 return allowImageFromSource(url, redirectStatus, reportingStatus);
841 case WebURLRequest::RequestContextFont: 842 case WebURLRequest::RequestContextFont:
842 return allowFontFromSource(url, redirectStatus, reportingStatus); 843 return allowFontFromSource(url, redirectStatus, reportingStatus);
843 case WebURLRequest::RequestContextForm: 844 case WebURLRequest::RequestContextForm:
844 return allowFormAction(url, redirectStatus, reportingStatus); 845 return allowFormAction(url, redirectStatus, reportingStatus);
845 case WebURLRequest::RequestContextFrame: 846 case WebURLRequest::RequestContextFrame:
846 case WebURLRequest::RequestContextIframe: 847 case WebURLRequest::RequestContextIframe:
847 return allowChildFrameFromSource(url, redirectStatus, reportingStatus); 848 return allowFrameFromSource(url, redirectStatus, reportingStatus);
848 case WebURLRequest::RequestContextImport: 849 case WebURLRequest::RequestContextImport:
849 case WebURLRequest::RequestContextScript: 850 case WebURLRequest::RequestContextScript:
850 return allowScriptFromSource(url, nonce, parserDisposition, 851 return allowScriptFromSource(url, nonce, parserDisposition,
851 redirectStatus, reportingStatus); 852 redirectStatus, reportingStatus);
852 case WebURLRequest::RequestContextXSLT: 853 case WebURLRequest::RequestContextXSLT:
853 return allowScriptFromSource(url, nonce, parserDisposition, 854 return allowScriptFromSource(url, nonce, parserDisposition,
854 redirectStatus, reportingStatus); 855 redirectStatus, reportingStatus);
855 case WebURLRequest::RequestContextManifest: 856 case WebURLRequest::RequestContextManifest:
856 return allowManifestFromSource(url, redirectStatus, reportingStatus); 857 return allowManifestFromSource(url, redirectStatus, reportingStatus);
857 case WebURLRequest::RequestContextServiceWorker: 858 case WebURLRequest::RequestContextServiceWorker:
(...skipping 27 matching lines...) Expand all
885 } 886 }
886 887
887 bool ContentSecurityPolicy::allowObjectFromSource( 888 bool ContentSecurityPolicy::allowObjectFromSource(
888 const KURL& url, 889 const KURL& url,
889 RedirectStatus redirectStatus, 890 RedirectStatus redirectStatus,
890 ContentSecurityPolicy::ReportingStatus reportingStatus) const { 891 ContentSecurityPolicy::ReportingStatus reportingStatus) const {
891 return isAllowedByAll<&CSPDirectiveList::allowObjectFromSource>( 892 return isAllowedByAll<&CSPDirectiveList::allowObjectFromSource>(
892 m_policies, url, redirectStatus, reportingStatus); 893 m_policies, url, redirectStatus, reportingStatus);
893 } 894 }
894 895
895 bool ContentSecurityPolicy::allowChildFrameFromSource( 896 bool ContentSecurityPolicy::allowFrameFromSource(
896 const KURL& url, 897 const KURL& url,
897 RedirectStatus redirectStatus, 898 RedirectStatus redirectStatus,
898 ContentSecurityPolicy::ReportingStatus reportingStatus) const { 899 ContentSecurityPolicy::ReportingStatus reportingStatus) const {
899 return isAllowedByAll<&CSPDirectiveList::allowChildFrameFromSource>( 900 return isAllowedByAll<&CSPDirectiveList::allowFrameFromSource>(
900 m_policies, url, redirectStatus, reportingStatus); 901 m_policies, url, redirectStatus, reportingStatus);
901 } 902 }
902 903
903 bool ContentSecurityPolicy::allowImageFromSource( 904 bool ContentSecurityPolicy::allowImageFromSource(
904 const KURL& url, 905 const KURL& url,
905 RedirectStatus redirectStatus, 906 RedirectStatus redirectStatus,
906 ContentSecurityPolicy::ReportingStatus reportingStatus) const { 907 ContentSecurityPolicy::ReportingStatus reportingStatus) const {
907 if (SchemeRegistry::schemeShouldBypassContentSecurityPolicy( 908 if (SchemeRegistry::schemeShouldBypassContentSecurityPolicy(
908 url.protocol(), SchemeRegistry::PolicyAreaImage)) 909 url.protocol(), SchemeRegistry::PolicyAreaImage))
909 return true; 910 return true;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 } 965 }
965 966
966 bool ContentSecurityPolicy::allowWorkerContextFromSource( 967 bool ContentSecurityPolicy::allowWorkerContextFromSource(
967 const KURL& url, 968 const KURL& url,
968 RedirectStatus redirectStatus, 969 RedirectStatus redirectStatus,
969 ContentSecurityPolicy::ReportingStatus reportingStatus) const { 970 ContentSecurityPolicy::ReportingStatus reportingStatus) const {
970 // CSP 1.1 moves workers from 'script-src' to the new 'child-src'. Measure the 971 // CSP 1.1 moves workers from 'script-src' to the new 'child-src'. Measure the
971 // impact of this backwards-incompatible change. 972 // impact of this backwards-incompatible change.
972 if (Document* document = this->document()) { 973 if (Document* document = this->document()) {
973 UseCounter::count(*document, UseCounter::WorkerSubjectToCSP); 974 UseCounter::count(*document, UseCounter::WorkerSubjectToCSP);
974 if (isAllowedByAll<&CSPDirectiveList::allowChildContextFromSource>( 975 if (isAllowedByAll<&CSPDirectiveList::allowWorkerFromSource>(
975 m_policies, url, redirectStatus, SuppressReport) && 976 m_policies, url, redirectStatus, SuppressReport) &&
976 !isAllowedByAll<&CSPDirectiveList::allowScriptFromSource>( 977 !isAllowedByAll<&CSPDirectiveList::allowScriptFromSource>(
977 m_policies, url, AtomicString(), NotParserInserted, redirectStatus, 978 m_policies, url, AtomicString(), NotParserInserted, redirectStatus,
978 SuppressReport)) { 979 SuppressReport)) {
979 UseCounter::count(*document, 980 UseCounter::count(*document,
980 UseCounter::WorkerAllowedByChildBlockedByScript); 981 UseCounter::WorkerAllowedByChildBlockedByScript);
981 } 982 }
982 } 983 }
983 984
984 return isAllowedByAll<&CSPDirectiveList::allowChildContextFromSource>( 985 return isAllowedByAll<&CSPDirectiveList::allowWorkerFromSource>(
985 m_policies, url, redirectStatus, reportingStatus); 986 m_policies, url, redirectStatus, reportingStatus);
986 } 987 }
987 988
988 bool ContentSecurityPolicy::allowManifestFromSource( 989 bool ContentSecurityPolicy::allowManifestFromSource(
989 const KURL& url, 990 const KURL& url,
990 RedirectStatus redirectStatus, 991 RedirectStatus redirectStatus,
991 ContentSecurityPolicy::ReportingStatus reportingStatus) const { 992 ContentSecurityPolicy::ReportingStatus reportingStatus) const {
992 return isAllowedByAll<&CSPDirectiveList::allowManifestFromSource>( 993 return isAllowedByAll<&CSPDirectiveList::allowManifestFromSource>(
993 m_policies, url, redirectStatus, reportingStatus); 994 m_policies, url, redirectStatus, reportingStatus);
994 } 995 }
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1513 // Collisions have no security impact, so we can save space by storing only 1514 // Collisions have no security impact, so we can save space by storing only
1514 // the string's hash rather than the whole report. 1515 // the string's hash rather than the whole report.
1515 return !m_violationReportsSent.contains(report.impl()->hash()); 1516 return !m_violationReportsSent.contains(report.impl()->hash());
1516 } 1517 }
1517 1518
1518 void ContentSecurityPolicy::didSendViolationReport(const String& report) { 1519 void ContentSecurityPolicy::didSendViolationReport(const String& report) {
1519 m_violationReportsSent.add(report.impl()->hash()); 1520 m_violationReportsSent.add(report.impl()->hash());
1520 } 1521 }
1521 1522
1522 } // namespace blink 1523 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698