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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.cpp

Issue 2042743002: Sandbox detached iframes a bit more (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updates Created 4 years, 6 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 19 matching lines...) Expand all
30 30
31 #include "bindings/core/v8/V8DOMWrapper.h" 31 #include "bindings/core/v8/V8DOMWrapper.h"
32 32
33 #include "bindings/core/v8/V8Binding.h" 33 #include "bindings/core/v8/V8Binding.h"
34 #include "bindings/core/v8/V8Location.h" 34 #include "bindings/core/v8/V8Location.h"
35 #include "bindings/core/v8/V8ObjectConstructor.h" 35 #include "bindings/core/v8/V8ObjectConstructor.h"
36 #include "bindings/core/v8/V8PerContextData.h" 36 #include "bindings/core/v8/V8PerContextData.h"
37 #include "bindings/core/v8/V8PerIsolateData.h" 37 #include "bindings/core/v8/V8PerIsolateData.h"
38 #include "bindings/core/v8/V8ScriptRunner.h" 38 #include "bindings/core/v8/V8ScriptRunner.h"
39 #include "bindings/core/v8/V8Window.h" 39 #include "bindings/core/v8/V8Window.h"
40 #include "core/dom/Document.h"
41 #include "core/frame/LocalDOMWindow.h"
40 42
41 namespace blink { 43 namespace blink {
42 44
43 v8::Local<v8::Object> V8DOMWrapper::createWrapper(v8::Isolate* isolate, v8::Loca l<v8::Object> creationContext, const WrapperTypeInfo* type) 45 v8::Local<v8::Object> V8DOMWrapper::createWrapper(v8::Isolate* isolate, v8::Loca l<v8::Object> creationContext, const WrapperTypeInfo* type)
44 { 46 {
45 ASSERT(!type->equals(&V8Window::wrapperTypeInfo)); 47 ASSERT(!type->equals(&V8Window::wrapperTypeInfo));
46 // According to https://html.spec.whatwg.org/multipage/browsers.html#securit y-location, 48 // According to https://html.spec.whatwg.org/multipage/browsers.html#securit y-location,
47 // cross-origin script access to a few properties of Location is allowed. 49 // cross-origin script access to a few properties of Location is allowed.
48 // Location already implements the necessary security checks. 50 // Location already implements the necessary security checks.
49 bool withSecurityCheck = !type->equals(&V8Location::wrapperTypeInfo); 51 bool withSecurityCheck = !type->equals(&V8Location::wrapperTypeInfo);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 && untrustedWrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink; 102 && untrustedWrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink;
101 } 103 }
102 104
103 void V8WrapperInstantiationScope::securityCheck(v8::Isolate* isolate, v8::Local< v8::Context> contextForWrapper) 105 void V8WrapperInstantiationScope::securityCheck(v8::Isolate* isolate, v8::Local< v8::Context> contextForWrapper)
104 { 106 {
105 if (m_context.IsEmpty()) 107 if (m_context.IsEmpty())
106 return; 108 return;
107 // If the context is different, we need to make sure that the current 109 // If the context is different, we need to make sure that the current
108 // context has access to the creation context. 110 // context has access to the creation context.
109 Frame* frame = toFrameIfNotDetached(contextForWrapper); 111 Frame* frame = toFrameIfNotDetached(contextForWrapper);
110 if (!frame) 112 if (!frame) {
113 // Sandbox detached frames - they can't create cross origin objects.
114 LocalDOMWindow* callingWindow = currentDOMWindow(isolate);
115 DOMWindow* targetWindow = toDOMWindow(contextForWrapper);
116 if (callingWindow->document()->getSecurityOrigin()->canAccessCheckSubori gins(targetWindow->document()->getSecurityOrigin()))
jochen (gone - plz use gerrit) 2016/06/07 08:47:39 here ^^^
117 return;
118
119 // TODO(jochen): Currently, Location is the only object for which we can reach this code path. Should be generalized.
120 ExceptionState exceptionState(ExceptionState::ConstructionContext, "Loca tion", contextForWrapper->Global(), isolate);
121 // We can't create a better message for a detached frame.
122 exceptionState.throwSecurityError(String(), String());
123 exceptionState.throwIfNeeded();
111 return; 124 return;
125 }
112 const DOMWrapperWorld& currentWorld = DOMWrapperWorld::world(m_context); 126 const DOMWrapperWorld& currentWorld = DOMWrapperWorld::world(m_context);
113 RELEASE_ASSERT(currentWorld.worldId() == DOMWrapperWorld::world(contextForWr apper).worldId()); 127 RELEASE_ASSERT(currentWorld.worldId() == DOMWrapperWorld::world(contextForWr apper).worldId());
114 if (currentWorld.isMainWorld()) { 128 if (currentWorld.isMainWorld()) {
115 RELEASE_ASSERT(BindingSecurity::shouldAllowAccessToFrame(isolate, curren tDOMWindow(isolate), frame, DoNotReportSecurityError)); 129 RELEASE_ASSERT(BindingSecurity::shouldAllowAccessToFrame(isolate, curren tDOMWindow(isolate), frame, DoNotReportSecurityError));
116 } 130 }
117 } 131 }
118 132
119 void V8WrapperInstantiationScope::convertException() 133 void V8WrapperInstantiationScope::convertException()
120 { 134 {
121 v8::Isolate* isolate = m_context->GetIsolate(); 135 v8::Isolate* isolate = m_context->GetIsolate();
122 // TODO(jochen): Currently, Location is the only object for which we can rea ch this code path. Should be generalized. 136 // TODO(jochen): Currently, Location is the only object for which we can rea ch this code path. Should be generalized.
123 ExceptionState exceptionState(ExceptionState::ConstructionContext, "Location ", isolate->GetCurrentContext()->Global(), isolate); 137 ExceptionState exceptionState(ExceptionState::ConstructionContext, "Location ", isolate->GetCurrentContext()->Global(), isolate);
124 LocalDOMWindow* callingWindow = currentDOMWindow(isolate); 138 LocalDOMWindow* callingWindow = currentDOMWindow(isolate);
125 DOMWindow* targetWindow = toDOMWindow(m_context); 139 DOMWindow* targetWindow = toDOMWindow(m_context);
126 exceptionState.throwSecurityError(targetWindow->sanitizedCrossDomainAccessEr rorMessage(callingWindow), targetWindow->crossDomainAccessErrorMessage(callingWi ndow)); 140 exceptionState.throwSecurityError(targetWindow->sanitizedCrossDomainAccessEr rorMessage(callingWindow), targetWindow->crossDomainAccessErrorMessage(callingWi ndow));
127 exceptionState.throwIfNeeded(); 141 exceptionState.throwIfNeeded();
128 } 142 }
129 143
130 } // namespace blink 144 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698