Changeset 251582 in webkit


Ignore:
Timestamp:
Oct 24, 2019 10:05:54 PM (5 years ago)
Author:
commit-queue@webkit.org
Message:

Add more information to SRI failure console messages
https://bugs.webkit.org/show_bug.cgi?id=203383

Patch by Alex Christensen <achristensen@webkit.org> on 2019-10-24
Reviewed by Geoff Garen.

Source/WebCore:

  • bindings/js/ScriptModuleLoader.cpp:

(WebCore::ScriptModuleLoader::notifyFinished):

  • dom/LoadableClassicScript.cpp:

(WebCore::LoadableClassicScript::notifyFinished):

  • html/HTMLLinkElement.cpp:

(WebCore::HTMLLinkElement::setCSSStyleSheet):

  • loader/DocumentThreadableLoader.cpp:

(WebCore::DocumentThreadableLoader::didFinishLoading):
(WebCore::DocumentThreadableLoader::reportIntegrityMetadataError):

  • loader/DocumentThreadableLoader.h:
  • loader/SubresourceIntegrity.cpp:

(WebCore::integrityMismatchDescription):

  • loader/SubresourceIntegrity.h:

LayoutTests:

  • http/tests/subresource-integrity/sri-enabled-with-setting-expected.txt:
  • http/tests/subresource-integrity/sri-module-expected.txt:
  • http/tests/subresource-integrity/sri-script-expected.txt:
  • http/tests/subresource-integrity/sri-style-expected.txt:
Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r251581 r251582  
     12019-10-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add more information to SRI failure console messages
     4        https://bugs.webkit.org/show_bug.cgi?id=203383
     5
     6        Reviewed by Geoff Garen.
     7
     8        * http/tests/subresource-integrity/sri-enabled-with-setting-expected.txt:
     9        * http/tests/subresource-integrity/sri-module-expected.txt:
     10        * http/tests/subresource-integrity/sri-script-expected.txt:
     11        * http/tests/subresource-integrity/sri-style-expected.txt:
     12
    1132019-10-24  Devin Rousso  <drousso@apple.com>
    214
  • trunk/LayoutTests/http/tests/subresource-integrity/sri-enabled-with-setting-expected.txt

    r216347 r251582  
    1 CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/non-matching-digest.js. Failed integrity metadata check.
    2 CONSOLE MESSAGE: line 107: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/style.css. Failed integrity metadata check.
     1CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/non-matching-digest.js. Failed integrity metadata check. Content length: 25, Expected content length: 25, Expected metadata: sha256-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead
     2CONSOLE MESSAGE: line 107: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/style.css. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha256-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead
    33
    44PASS Test that Subresource Integrity's 'integrity' property is exposed on the <link> element.
  • trunk/LayoutTests/http/tests/subresource-integrity/sri-module-expected.txt

    r223237 r251582  
    1 CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/non-matching-digest-module.js. Failed integrity metadata check.
    2 CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest-module.js. Failed integrity metadata check.
    3 CONSOLE MESSAGE: TypeError: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script-module.js. Failed integrity metadata check.
    4 CONSOLE MESSAGE: TypeError: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-creds-script-module.js. Failed integrity metadata check.
     1CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/non-matching-digest-module.js. Failed integrity metadata check. Content length: 33, Expected content length: 33, Expected metadata: sha256-cWh9nPfm7/mRbKhzarnRYlsJWz5XTNcsqPFzKEx+zSU=
     2CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest-module.js. Failed integrity metadata check. Content length: 29, Expected content length: 29, Expected metadata: sha512-deadbeefspbnUnwooKGNNCb39nvg+EW0O9hDScTXeo/9pVZztLSUYU3LNV6H0lZapo8bCJUpyPPLAzE9fDzpxg== sha256-cWh9nPfm7/mRbKhzarnRYlsJWz5XTNcsqPFzKEx+zSU=
     3CONSOLE MESSAGE: TypeError: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script-module.js. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha256-deadbeefcSLlbFZCj1OACLxTxVck2TOrBTEdUbwz1yU=
     4CONSOLE MESSAGE: TypeError: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-creds-script-module.js. Failed integrity metadata check. Content length: 38, Expected content length: 38, Expected metadata: sha256-deadbeef2S+pTRZgiw3DWrhC6JLDlt2zRyGpwH7unU8=
    55CONSOLE MESSAGE: Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin.
    66CONSOLE MESSAGE: TypeError: Cross-origin script load denied by Cross-Origin Resource Sharing policy.
    7 CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest-module.js. Failed integrity metadata check.
    8 CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest-module.js. Failed integrity metadata check.
     7CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest-module.js. Failed integrity metadata check. Content length: 29, Expected content length: 29, Expected metadata: sha256-cWh9nPfm7_mRbKhzarnRYlsJWz5XTNcsqPFzKEx+zSU=
     8CONSOLE MESSAGE: TypeError: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest-module.js. Failed integrity metadata check. Content length: 29, Expected content length: 29, Expected metadata: sha256-U9WYDtBWkcHx13+9UKk/3Q5eoqDc4YGxYb07EPWzb9e=?foo=bar?spam=eggs
    99
    1010PASS Module: Same-origin with correct sha256 hash.
  • trunk/LayoutTests/http/tests/subresource-integrity/sri-script-expected.txt

    r216347 r251582  
    1 CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/non-matching-digest.js. Failed integrity metadata check.
    2 CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest.js. Failed integrity metadata check.
    3 CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script.js. Failed integrity metadata check.
    4 CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-creds-script.js. Failed integrity metadata check.
     1CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/non-matching-digest.js. Failed integrity metadata check. Content length: 25, Expected content length: 25, Expected metadata: sha256-U9WYDtBWkcHx13+9UKk/3Q5eoqDc4YGxYb07EPWzb9e=
     2CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest.js. Failed integrity metadata check. Content length: 21, Expected content length: 21, Expected metadata: sha512-deadbeefspbnUnwooKGNNCb39nvg+EW0O9hDScTXeo/9pVZztLSUYU3LNV6H0lZapo8bCJUpyPPLAzE9fDzpxg== sha256-U9WYDtBWkcHx13+9UKk/3Q5eoqDc4YGxYb07EPWzb9E=
     3CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script.js. Failed integrity metadata check. Content length: 29, Expected content length: 29, Expected metadata: sha256-deadbeefcSLlbFZCj1OACLxTxVck2TOrBTEdUbwz1yU=
     4CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-creds-script.js. Failed integrity metadata check. Content length: 30, Expected content length: 30, Expected metadata: sha256-deadbeef2S+pTRZgiw3DWrhC6JLDlt2zRyGpwH7unU8=
    55CONSOLE MESSAGE: Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin.
    66CONSOLE MESSAGE: Cross-origin script load denied by Cross-Origin Resource Sharing policy.
    7 CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script.js. Failed integrity metadata check.
    8 CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script.js. Failed integrity metadata check.
    9 CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest.js. Failed integrity metadata check.
    10 CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest.js. Failed integrity metadata check.
     7CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script.js. Failed integrity metadata check. Content length: 29, Expected content length: 29, Expected metadata: sha256-51AjITq701Y0yKSx3/UoIKtIY2UQ9+H8WGyyMuOWOC0=
     8CONSOLE MESSAGE: Cannot load script http://localhost:8000/subresource-integrity/resources/crossorigin-anon-script.js. Failed integrity metadata check. Content length: 29, Expected content length: 29, Expected metadata: sha256-deadbeef01Y0yKSx3/UoIKtIY2UQ9+H8WGyyMuOWOC0=
     9CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest.js. Failed integrity metadata check. Content length: 21, Expected content length: 21, Expected metadata: sha256-U9WYDtBWkcHx13+9UKk_3Q5eoqDc4YGxYb07EPWzb9E=
     10CONSOLE MESSAGE: Cannot load script http://127.0.0.1:8000/subresource-integrity/resources/matching-digest.js. Failed integrity metadata check. Content length: 21, Expected content length: 21, Expected metadata: sha256-U9WYDtBWkcHx13+9UKk/3Q5eoqDc4YGxYb07EPWzb9e=?foo=bar?spam=eggs
    1111
    1212PASS Script: Same-origin with correct sha256 hash.
  • trunk/LayoutTests/http/tests/subresource-integrity/sri-style-expected.txt

    r216347 r251582  
    1 CONSOLE MESSAGE: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/style.css?5. Failed integrity metadata check.
    2 CONSOLE MESSAGE: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/style.css?9. Failed integrity metadata check.
    3 CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-anon-style.css?&2. Failed integrity metadata check.
    4 CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-creds-style.css?&2. Failed integrity metadata check.
     1CONSOLE MESSAGE: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/style.css?5. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha256-deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdead
     2CONSOLE MESSAGE: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/style.css?9. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha512-deadbeef9wXDjd6Wq3H6nPAhI9zOvG7mJkUr03MTxaO+8ztTKnfJif42laL93Be/IF6YYZHHF4esitVYxiwpY2== sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=
     3CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-anon-style.css?&2. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha256-deadbeefCzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk=
     4CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-creds-style.css?&2. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha256-deadbeefCzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk=
    55CONSOLE MESSAGE: Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin.
    6 CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-anon-style.css?&3. Failed integrity metadata check.
    7 CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-anon-style.css?&4. Failed integrity metadata check.
    8 CONSOLE MESSAGE: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/alternate.css?2. Failed integrity metadata check.
     6CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-anon-style.css?&3. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha256-CzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk7gyCWUV4=
     7CONSOLE MESSAGE: Cannot load stylesheet http://localhost:8000/subresource-integrity/resources/crossorigin-anon-style.css?&4. Failed integrity metadata check. Content length: 37, Expected content length: 37, Expected metadata: sha256-deadbeefCzHgdJ7wOccM8L89n4bhcJMz3F+SPLT7YZk=
     8CONSOLE MESSAGE: Cannot load stylesheet http://127.0.0.1:8000/subresource-integrity/resources/alternate.css?2. Failed integrity metadata check. Content length: 34, Expected content length: 34, Expected metadata: sha256-fail83bWhnLig+d2VPKrRrTRyhqoDRo1ruGqZLZ0= sha512-failB7ktnzcb6h+kB9CUIuc8qvKIyLpygRJdQSEEycRy74dUsB+Yu9rSjpOPjRUblle8WWX9Gn7v39LK2Oceig==
    99
    1010PASS Style: Same-origin with correct sha256 hash
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/integrity-expected.txt

    r227471 r251582  
    1 CONSOLE MESSAGE: line 1: TypeError: Cannot load script http://localhost:8800/html/semantics/scripting-1/the-script-element/module/integrity-mismatches.js. Failed integrity metadata check.
     1CONSOLE MESSAGE: line 1: TypeError: Cannot load script http://localhost:8800/html/semantics/scripting-1/the-script-element/module/integrity-mismatches.js. Failed integrity metadata check. Content length: 93, Expected content length: -1, Expected metadata: sha384-doesnotmatch
    22
    33PASS The integrity attribute must have no affect on inline module scripts
  • trunk/LayoutTests/js/dom/modules/module-fetch-failure-not-cached-expected.txt

    r224662 r251582  
    1 CONSOLE MESSAGE: TypeError: Cannot load script module-fetch-failure-not-cached.js. Failed integrity metadata check.
     1CONSOLE MESSAGE: TypeError: Cannot load script module-fetch-failure-not-cached.js. Failed integrity metadata check. Content length: 30, Expected content length: 30, Expected metadata: sha256-badbeef
    22
    33PASS Module fetch failure is not cached in module pipeline
  • trunk/Source/WebCore/ChangeLog

    r251581 r251582  
     12019-10-24  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add more information to SRI failure console messages
     4        https://bugs.webkit.org/show_bug.cgi?id=203383
     5
     6        Reviewed by Geoff Garen.
     7
     8        * bindings/js/ScriptModuleLoader.cpp:
     9        (WebCore::ScriptModuleLoader::notifyFinished):
     10        * dom/LoadableClassicScript.cpp:
     11        (WebCore::LoadableClassicScript::notifyFinished):
     12        * html/HTMLLinkElement.cpp:
     13        (WebCore::HTMLLinkElement::setCSSStyleSheet):
     14        * loader/DocumentThreadableLoader.cpp:
     15        (WebCore::DocumentThreadableLoader::didFinishLoading):
     16        (WebCore::DocumentThreadableLoader::reportIntegrityMetadataError):
     17        * loader/DocumentThreadableLoader.h:
     18        * loader/SubresourceIntegrity.cpp:
     19        (WebCore::integrityMismatchDescription):
     20        * loader/SubresourceIntegrity.h:
     21
    1222019-10-24  Devin Rousso  <drousso@apple.com>
    223
  • trunk/Source/WebCore/bindings/js/ScriptModuleLoader.cpp

    r251425 r251582  
    314314    if (auto* parameters = loader.parameters()) {
    315315        if (!matchIntegrityMetadata(cachedScript, parameters->integrity())) {
    316             promise->reject(TypeError, makeString("Cannot load script ", cachedScript.url().stringCenterEllipsizedToLength(), ". Failed integrity metadata check."));
     316            promise->reject(TypeError, makeString("Cannot load script ", integrityMismatchDescription(cachedScript, parameters->integrity())));
    317317            return;
    318318        }
  • trunk/Source/WebCore/dom/LoadableClassicScript.cpp

    r247509 r251582  
    111111        m_error = Error {
    112112            ErrorType::FailedIntegrityCheck,
    113             ConsoleMessage { MessageSource::Security, MessageLevel::Error, makeString("Cannot load script ", m_cachedScript->url().stringCenterEllipsizedToLength(), ". Failed integrity metadata check.") }
     113            ConsoleMessage { MessageSource::Security, MessageLevel::Error, makeString("Cannot load script ", integrityMismatchDescription(resource, m_integrity)) }
    114114        };
    115115    }
  • trunk/Source/WebCore/html/HTMLLinkElement.cpp

    r249426 r251582  
    433433
    434434    if (!cachedStyleSheet->errorOccurred() && !matchIntegrityMetadata(*cachedStyleSheet, m_integrityMetadataForPendingSheetRequest)) {
    435         document().addConsoleMessage(MessageSource::Security, MessageLevel::Error, makeString("Cannot load stylesheet ", cachedStyleSheet->url().stringCenterEllipsizedToLength(), ". Failed integrity metadata check."));
     435        document().addConsoleMessage(MessageSource::Security, MessageLevel::Error, makeString("Cannot load stylesheet ", integrityMismatchDescription(*cachedStyleSheet, m_integrityMetadataForPendingSheetRequest)));
    436436
    437437        m_loading = false;
  • trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp

    r250738 r251582  
    443443    if (m_delayCallbacksForIntegrityCheck) {
    444444        if (!matchIntegrityMetadata(*m_resource, m_options.integrity)) {
    445             reportIntegrityMetadataError(m_resource->url());
     445            reportIntegrityMetadataError(*m_resource, m_options.integrity);
    446446            return;
    447447        }
     
    684684}
    685685
    686 void DocumentThreadableLoader::reportIntegrityMetadataError(const URL& url)
    687 {
    688     logErrorAndFail(ResourceError(errorDomainWebKitInternal, 0, url, "Failed integrity metadata check."_s, ResourceError::Type::General));
     686void DocumentThreadableLoader::reportIntegrityMetadataError(const CachedResource& resource, const String& expectedMetadata)
     687{
     688    logErrorAndFail(ResourceError(errorDomainWebKitInternal, 0, resource.url(), makeString("Failed integrity metadata check. "_s, integrityMismatchDescription(resource, expectedMetadata)), ResourceError::Type::General));
    689689}
    690690
  • trunk/Source/WebCore/loader/DocumentThreadableLoader.h

    r250414 r251582  
    114114        void reportContentSecurityPolicyError(const URL&);
    115115        void reportCrossOriginResourceSharingError(const URL&);
    116         void reportIntegrityMetadataError(const URL&);
     116        void reportIntegrityMetadataError(const CachedResource&, const String& expectedMetadata);
    117117        void logErrorAndFail(const ResourceError&);
    118118
  • trunk/Source/WebCore/loader/SubresourceIntegrity.cpp

    r239427 r251582  
    209209}
    210210
    211 }
     211String integrityMismatchDescription(const CachedResource& resource, const String& integrityMetadata)
     212{
     213    StringBuilder builder;
     214
     215    builder.append(resource.url().stringCenterEllipsizedToLength());
     216    builder.append(". Failed integrity metadata check. ");
     217    builder.append("Content length: ");
     218    if (auto* resourceBuffer = resource.resourceBuffer())
     219        builder.appendNumber(resourceBuffer->size());
     220    else
     221        builder.append("(no content)");
     222    builder.append(", Expected content length: ");
     223    builder.appendNumber(resource.response().expectedContentLength());
     224    builder.append(", Expected metadata: ");
     225    builder.append(integrityMetadata);
     226
     227    return builder.toString();
     228}
     229
     230}
  • trunk/Source/WebCore/loader/SubresourceIntegrity.h

    r216347 r251582  
    3333
    3434bool matchIntegrityMetadata(const CachedResource&, const String& integrityMetadata);
     35String integrityMismatchDescription(const CachedResource&, const String& integrityMetadata);
    3536
    3637}
Note: See TracChangeset for help on using the changeset viewer.