Chromium Code Reviews| 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 81 | 81 |
| 82 // CSP 1.1 Directives | 82 // CSP 1.1 Directives |
| 83 const char ContentSecurityPolicy::BaseURI[] = "base-uri"; | 83 const char ContentSecurityPolicy::BaseURI[] = "base-uri"; |
| 84 const char ContentSecurityPolicy::ChildSrc[] = "child-src"; | 84 const char ContentSecurityPolicy::ChildSrc[] = "child-src"; |
| 85 const char ContentSecurityPolicy::FormAction[] = "form-action"; | 85 const char ContentSecurityPolicy::FormAction[] = "form-action"; |
| 86 const char ContentSecurityPolicy::FrameAncestors[] = "frame-ancestors"; | 86 const char ContentSecurityPolicy::FrameAncestors[] = "frame-ancestors"; |
| 87 const char ContentSecurityPolicy::PluginTypes[] = "plugin-types"; | 87 const char ContentSecurityPolicy::PluginTypes[] = "plugin-types"; |
| 88 const char ContentSecurityPolicy::ReflectedXSS[] = "reflected-xss"; | 88 const char ContentSecurityPolicy::ReflectedXSS[] = "reflected-xss"; |
| 89 const char ContentSecurityPolicy::Referrer[] = "referrer"; | 89 const char ContentSecurityPolicy::Referrer[] = "referrer"; |
| 90 | 90 |
| 91 // Experimental Directives (post CSP 1.1) | |
| 92 const char ContentSecurityPolicy::Suborigin[] = "suborigin"; | |
| 93 | |
| 91 bool ContentSecurityPolicy::isDirectiveName(const String& name) | 94 bool ContentSecurityPolicy::isDirectiveName(const String& name) |
| 92 { | 95 { |
| 93 return (equalIgnoringCase(name, ConnectSrc) | 96 return (equalIgnoringCase(name, ConnectSrc) |
| 94 || equalIgnoringCase(name, DefaultSrc) | 97 || equalIgnoringCase(name, DefaultSrc) |
| 95 || equalIgnoringCase(name, FontSrc) | 98 || equalIgnoringCase(name, FontSrc) |
| 96 || equalIgnoringCase(name, FrameSrc) | 99 || equalIgnoringCase(name, FrameSrc) |
| 97 || equalIgnoringCase(name, ImgSrc) | 100 || equalIgnoringCase(name, ImgSrc) |
| 98 || equalIgnoringCase(name, MediaSrc) | 101 || equalIgnoringCase(name, MediaSrc) |
| 99 || equalIgnoringCase(name, ObjectSrc) | 102 || equalIgnoringCase(name, ObjectSrc) |
| 100 || equalIgnoringCase(name, ReportURI) | 103 || equalIgnoringCase(name, ReportURI) |
| 101 || equalIgnoringCase(name, Sandbox) | 104 || equalIgnoringCase(name, Sandbox) |
| 102 || equalIgnoringCase(name, ScriptSrc) | 105 || equalIgnoringCase(name, ScriptSrc) |
| 106 || equalIgnoringCase(name, Suborigin) | |
| 103 || equalIgnoringCase(name, StyleSrc) | 107 || equalIgnoringCase(name, StyleSrc) |
| 104 || equalIgnoringCase(name, BaseURI) | 108 || equalIgnoringCase(name, BaseURI) |
| 105 || equalIgnoringCase(name, ChildSrc) | 109 || equalIgnoringCase(name, ChildSrc) |
| 106 || equalIgnoringCase(name, FormAction) | 110 || equalIgnoringCase(name, FormAction) |
| 107 || equalIgnoringCase(name, FrameAncestors) | 111 || equalIgnoringCase(name, FrameAncestors) |
| 108 || equalIgnoringCase(name, PluginTypes) | 112 || equalIgnoringCase(name, PluginTypes) |
| 109 || equalIgnoringCase(name, ReflectedXSS) | 113 || equalIgnoringCase(name, ReflectedXSS) |
| 110 || equalIgnoringCase(name, Referrer) | 114 || equalIgnoringCase(name, Referrer) |
| 111 ); | 115 ); |
| 112 } | 116 } |
| (...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 539 { | 543 { |
| 540 return m_client->contextCompleteURL(url); | 544 return m_client->contextCompleteURL(url); |
| 541 } | 545 } |
| 542 | 546 |
| 543 void ContentSecurityPolicy::enforceSandboxFlags(SandboxFlags mask) const | 547 void ContentSecurityPolicy::enforceSandboxFlags(SandboxFlags mask) const |
| 544 { | 548 { |
| 545 if (Document* document = this->document()) | 549 if (Document* document = this->document()) |
| 546 document->enforceSandboxFlags(mask); | 550 document->enforceSandboxFlags(mask); |
| 547 } | 551 } |
| 548 | 552 |
| 553 void ContentSecurityPolicy::enforceSuborigin(String name) const | |
|
abarth-chromium
2014/07/31 04:56:47
const String&
jww
2014/10/21 23:51:06
Done.
| |
| 554 { | |
| 555 if (m_client->isDocument()) | |
| 556 static_cast<Document*>(m_client)->enforceSuborigin(name); | |
| 557 } | |
| 558 | |
| 549 static String stripURLForUseInReport(Document* document, const KURL& url) | 559 static String stripURLForUseInReport(Document* document, const KURL& url) |
| 550 { | 560 { |
| 551 if (!url.isValid()) | 561 if (!url.isValid()) |
| 552 return String(); | 562 return String(); |
| 553 if (!url.isHierarchical() || url.protocolIs("file")) | 563 if (!url.isHierarchical() || url.protocolIs("file")) |
| 554 return url.protocol(); | 564 return url.protocol(); |
| 555 return document->securityOrigin()->canRequest(url) ? url.strippedForUseAsRef errer() : SecurityOrigin::create(url)->toString(); | 565 return document->securityOrigin()->canRequest(url) ? url.strippedForUseAsRef errer() : SecurityOrigin::create(url)->toString(); |
| 556 } | 566 } |
| 557 | 567 |
| 558 static void gatherSecurityPolicyViolationEventData(SecurityPolicyViolationEventI nit& init, Document* document, const String& directiveText, const String& effect iveDirective, const KURL& blockedURL, const String& header) | 568 static void gatherSecurityPolicyViolationEventData(SecurityPolicyViolationEventI nit& init, Document* document, const String& directiveText, const String& effect iveDirective, const KURL& blockedURL, const String& header) |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 705 else | 715 else |
| 706 message = "Invalid plugin type in 'plugin-types' Content Security Policy directive: '" + pluginType + "'.\n"; | 716 message = "Invalid plugin type in 'plugin-types' Content Security Policy directive: '" + pluginType + "'.\n"; |
| 707 logToConsole(message); | 717 logToConsole(message); |
| 708 } | 718 } |
| 709 | 719 |
| 710 void ContentSecurityPolicy::reportInvalidSandboxFlags(const String& invalidFlags ) const | 720 void ContentSecurityPolicy::reportInvalidSandboxFlags(const String& invalidFlags ) const |
| 711 { | 721 { |
| 712 logToConsole("Error while parsing the 'sandbox' Content Security Policy dire ctive: " + invalidFlags); | 722 logToConsole("Error while parsing the 'sandbox' Content Security Policy dire ctive: " + invalidFlags); |
| 713 } | 723 } |
| 714 | 724 |
| 725 void ContentSecurityPolicy::reportInvalidSuboriginFlags(const String& invalidFla gs) const | |
| 726 { | |
| 727 logToConsole("Error while parsing the 'suborigin' Content Security Policy di rective: " + invalidFlags); | |
| 728 } | |
| 729 | |
| 715 void ContentSecurityPolicy::reportInvalidReflectedXSS(const String& invalidValue ) const | 730 void ContentSecurityPolicy::reportInvalidReflectedXSS(const String& invalidValue ) const |
| 716 { | 731 { |
| 717 logToConsole("The 'reflected-xss' Content Security Policy directive has the invalid value \"" + invalidValue + "\". Valid values are \"allow\", \"filter\", and \"block\"."); | 732 logToConsole("The 'reflected-xss' Content Security Policy directive has the invalid value \"" + invalidValue + "\". Valid values are \"allow\", \"filter\", and \"block\"."); |
| 718 } | 733 } |
| 719 | 734 |
| 720 void ContentSecurityPolicy::reportInvalidDirectiveValueCharacter(const String& d irectiveName, const String& value) const | 735 void ContentSecurityPolicy::reportInvalidDirectiveValueCharacter(const String& d irectiveName, const String& value) const |
| 721 { | 736 { |
| 722 String message = "The value for Content Security Policy directive '" + direc tiveName + "' contains an invalid character: '" + value + "'. Non-whitespace cha racters outside ASCII 0x21-0x7E must be percent-encoded, as described in RFC 398 6, section 2.1: http://tools.ietf.org/html/rfc3986#section-2.1."; | 737 String message = "The value for Content Security Policy directive '" + direc tiveName + "' contains an invalid character: '" + value + "'. Non-whitespace cha racters outside ASCII 0x21-0x7E must be percent-encoded, as described in RFC 398 6, section 2.1: http://tools.ietf.org/html/rfc3986#section-2.1."; |
| 723 logToConsole(message); | 738 logToConsole(message); |
| 724 } | 739 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 777 // Collisions have no security impact, so we can save space by storing only the string's hash rather than the whole report. | 792 // Collisions have no security impact, so we can save space by storing only the string's hash rather than the whole report. |
| 778 return !m_violationReportsSent.contains(report.impl()->hash()); | 793 return !m_violationReportsSent.contains(report.impl()->hash()); |
| 779 } | 794 } |
| 780 | 795 |
| 781 void ContentSecurityPolicy::didSendViolationReport(const String& report) | 796 void ContentSecurityPolicy::didSendViolationReport(const String& report) |
| 782 { | 797 { |
| 783 m_violationReportsSent.add(report.impl()->hash()); | 798 m_violationReportsSent.add(report.impl()->hash()); |
| 784 } | 799 } |
| 785 | 800 |
| 786 } // namespace WebCore | 801 } // namespace WebCore |
| OLD | NEW |