OLD | NEW |
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 1029 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1040 const String& header, | 1040 const String& header, |
1041 RedirectStatus redirectStatus, | 1041 RedirectStatus redirectStatus, |
1042 ContentSecurityPolicyHeaderType headerType, | 1042 ContentSecurityPolicyHeaderType headerType, |
1043 ContentSecurityPolicy::ViolationType violationType, | 1043 ContentSecurityPolicy::ViolationType violationType, |
1044 int contextLine, | 1044 int contextLine, |
1045 const String& scriptSource) { | 1045 const String& scriptSource) { |
1046 if (effectiveType == ContentSecurityPolicy::DirectiveType::FrameAncestors) { | 1046 if (effectiveType == ContentSecurityPolicy::DirectiveType::FrameAncestors) { |
1047 // If this load was blocked via 'frame-ancestors', then the URL of | 1047 // If this load was blocked via 'frame-ancestors', then the URL of |
1048 // |document| has not yet been initialized. In this case, we'll set both | 1048 // |document| has not yet been initialized. In this case, we'll set both |
1049 // 'documentURI' and 'blockedURI' to the blocked document's URL. | 1049 // 'documentURI' and 'blockedURI' to the blocked document's URL. |
1050 init.setDocumentURI(blockedURL.getString()); | 1050 String strippedURL = stripURLForUseInReport( |
1051 init.setBlockedURI(blockedURL.getString()); | 1051 context, blockedURL, RedirectStatus::NoRedirect, |
| 1052 ContentSecurityPolicy::DirectiveType::DefaultSrc); |
| 1053 init.setDocumentURI(strippedURL); |
| 1054 init.setBlockedURI(strippedURL); |
1052 } else { | 1055 } else { |
1053 init.setDocumentURI(context->url().getString()); | 1056 String strippedURL = stripURLForUseInReport( |
| 1057 context, context->url(), RedirectStatus::NoRedirect, |
| 1058 ContentSecurityPolicy::DirectiveType::DefaultSrc); |
| 1059 init.setDocumentURI(strippedURL); |
1054 switch (violationType) { | 1060 switch (violationType) { |
1055 case ContentSecurityPolicy::InlineViolation: | 1061 case ContentSecurityPolicy::InlineViolation: |
1056 init.setBlockedURI("inline"); | 1062 init.setBlockedURI("inline"); |
1057 break; | 1063 break; |
1058 case ContentSecurityPolicy::EvalViolation: | 1064 case ContentSecurityPolicy::EvalViolation: |
1059 init.setBlockedURI("eval"); | 1065 init.setBlockedURI("eval"); |
1060 break; | 1066 break; |
1061 case ContentSecurityPolicy::URLViolation: | 1067 case ContentSecurityPolicy::URLViolation: |
1062 init.setBlockedURI(stripURLForUseInReport( | 1068 init.setBlockedURI(stripURLForUseInReport( |
1063 context, blockedURL, redirectStatus, effectiveType)); | 1069 context, blockedURL, redirectStatus, effectiveType)); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1176 | 1182 |
1177 // We need to be careful here when deciding what information to send to the | 1183 // We need to be careful here when deciding what information to send to the |
1178 // report-uri. Currently, we send only the current document's URL and the | 1184 // report-uri. Currently, we send only the current document's URL and the |
1179 // directive that was violated. The document's URL is safe to send because | 1185 // directive that was violated. The document's URL is safe to send because |
1180 // it's the document itself that's requesting that it be sent. You could | 1186 // it's the document itself that's requesting that it be sent. You could |
1181 // make an argument that we shouldn't send HTTPS document URLs to HTTP | 1187 // make an argument that we shouldn't send HTTPS document URLs to HTTP |
1182 // report-uris (for the same reasons that we supress the Referer in that | 1188 // report-uris (for the same reasons that we supress the Referer in that |
1183 // case), but the Referer is sent implicitly whereas this request is only | 1189 // case), but the Referer is sent implicitly whereas this request is only |
1184 // sent explicitly. As for which directive was violated, that's pretty | 1190 // sent explicitly. As for which directive was violated, that's pretty |
1185 // harmless information. | 1191 // harmless information. |
| 1192 // |
| 1193 // TODO(mkwst): This justification is BS. Insecure reports are mixed content, |
| 1194 // let's kill them. https://crbug.com/695363 |
1186 | 1195 |
1187 std::unique_ptr<JSONObject> cspReport = JSONObject::create(); | 1196 std::unique_ptr<JSONObject> cspReport = JSONObject::create(); |
1188 cspReport->setString("document-uri", violationData.documentURI()); | 1197 cspReport->setString("document-uri", violationData.documentURI()); |
1189 cspReport->setString("referrer", violationData.referrer()); | 1198 cspReport->setString("referrer", violationData.referrer()); |
1190 cspReport->setString("violated-directive", violationData.violatedDirective()); | 1199 cspReport->setString("violated-directive", violationData.violatedDirective()); |
1191 cspReport->setString("effective-directive", | 1200 cspReport->setString("effective-directive", |
1192 violationData.effectiveDirective()); | 1201 violationData.effectiveDirective()); |
1193 cspReport->setString("original-policy", violationData.originalPolicy()); | 1202 cspReport->setString("original-policy", violationData.originalPolicy()); |
1194 cspReport->setString("disposition", violationData.disposition()); | 1203 cspReport->setString("disposition", violationData.disposition()); |
1195 cspReport->setString("blocked-uri", violationData.blockedURI()); | 1204 cspReport->setString("blocked-uri", violationData.blockedURI()); |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1635 if (SecurityOrigin::shouldUseInnerURL(url)) { | 1644 if (SecurityOrigin::shouldUseInnerURL(url)) { |
1636 return SchemeRegistry::schemeShouldBypassContentSecurityPolicy( | 1645 return SchemeRegistry::schemeShouldBypassContentSecurityPolicy( |
1637 SecurityOrigin::extractInnerURL(url).protocol(), area); | 1646 SecurityOrigin::extractInnerURL(url).protocol(), area); |
1638 } else { | 1647 } else { |
1639 return SchemeRegistry::schemeShouldBypassContentSecurityPolicy( | 1648 return SchemeRegistry::schemeShouldBypassContentSecurityPolicy( |
1640 url.protocol(), area); | 1649 url.protocol(), area); |
1641 } | 1650 } |
1642 } | 1651 } |
1643 | 1652 |
1644 } // namespace blink | 1653 } // namespace blink |
OLD | NEW |