Commit b5ebd0c6 authored by Takashi Toyoshima's avatar Takashi Toyoshima Committed by Commit Bot

OOR-CORS: use request_initiator for setting preflight Origin header

Blink should set the request_initiator correctly to use OOR-CORS
for security checks. Blink had several Origin variants, but now
the right SecurityOrigin is set to the blink::ResourceRequest's
RequestorOrigin. If something get broken, we need to modify Blink-site
to set a suitable origin.

Bug: 803766
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_mojo
Change-Id: Ic5e184a58009189f128082c4232526e046e743cc
Reviewed-on: https://chromium-review.googlesource.com/964103
Commit-Queue: Takashi Toyoshima <toyoshim@chromium.org>
Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#547670}
parent 78f882f3
...@@ -85,6 +85,10 @@ std::unique_ptr<ResourceRequest> PreflightController::CreatePreflightRequest( ...@@ -85,6 +85,10 @@ std::unique_ptr<ResourceRequest> PreflightController::CreatePreflightRequest(
cors::header_names::kAccessControlRequestExternal, "true"); cors::header_names::kAccessControlRequestExternal, "true");
} }
DCHECK(request.request_initiator);
preflight_request->headers.SetHeader(net::HttpRequestHeaders::kOrigin,
request.request_initiator->Serialize());
// TODO(toyoshim): Remove the following line once the network service is // TODO(toyoshim): Remove the following line once the network service is
// enabled by default. // enabled by default.
preflight_request->skip_service_worker = true; preflight_request->skip_service_worker = true;
......
...@@ -4,8 +4,10 @@ ...@@ -4,8 +4,10 @@
#include "services/network/cors/preflight_controller.h" #include "services/network/cors/preflight_controller.h"
#include "net/http/http_request_headers.h"
#include "services/network/public/cpp/cors/cors.h" #include "services/network/public/cpp/cors/cors.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "url/origin.h"
namespace network { namespace network {
...@@ -15,6 +17,7 @@ namespace { ...@@ -15,6 +17,7 @@ namespace {
TEST(PreflightControllerCreatePreflightRequestTest, LexicographicalOrder) { TEST(PreflightControllerCreatePreflightRequestTest, LexicographicalOrder) {
ResourceRequest request; ResourceRequest request;
request.request_initiator = url::Origin();
request.headers.SetHeader("Orange", "Orange"); request.headers.SetHeader("Orange", "Orange");
request.headers.SetHeader("Apple", "Red"); request.headers.SetHeader("Apple", "Red");
request.headers.SetHeader("Kiwifruit", "Green"); request.headers.SetHeader("Kiwifruit", "Green");
...@@ -25,6 +28,10 @@ TEST(PreflightControllerCreatePreflightRequestTest, LexicographicalOrder) { ...@@ -25,6 +28,10 @@ TEST(PreflightControllerCreatePreflightRequestTest, LexicographicalOrder) {
PreflightController::CreatePreflightRequest(request); PreflightController::CreatePreflightRequest(request);
std::string header; std::string header;
EXPECT_TRUE(
preflight->headers.GetHeader(net::HttpRequestHeaders::kOrigin, &header));
EXPECT_EQ("null", header);
EXPECT_TRUE(preflight->headers.GetHeader( EXPECT_TRUE(preflight->headers.GetHeader(
cors::header_names::kAccessControlRequestHeaders, &header)); cors::header_names::kAccessControlRequestHeaders, &header));
EXPECT_EQ("apple,content-type,kiwifruit,orange,strawberry", header); EXPECT_EQ("apple,content-type,kiwifruit,orange,strawberry", header);
...@@ -32,6 +39,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, LexicographicalOrder) { ...@@ -32,6 +39,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, LexicographicalOrder) {
TEST(PreflightControllerCreatePreflightRequestTest, ExcludeSimpleHeaders) { TEST(PreflightControllerCreatePreflightRequestTest, ExcludeSimpleHeaders) {
ResourceRequest request; ResourceRequest request;
request.request_initiator = url::Origin();
request.headers.SetHeader("Accept", "everything"); request.headers.SetHeader("Accept", "everything");
request.headers.SetHeader("Accept-Language", "everything"); request.headers.SetHeader("Accept-Language", "everything");
request.headers.SetHeader("Content-Language", "everything"); request.headers.SetHeader("Content-Language", "everything");
...@@ -51,6 +59,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, ExcludeSimpleHeaders) { ...@@ -51,6 +59,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, ExcludeSimpleHeaders) {
TEST(PreflightControllerCreatePreflightRequestTest, TEST(PreflightControllerCreatePreflightRequestTest,
ExcludeSimpleContentTypeHeader) { ExcludeSimpleContentTypeHeader) {
ResourceRequest request; ResourceRequest request;
request.request_initiator = url::Origin();
request.headers.SetHeader("Content-Type", "text/plain"); request.headers.SetHeader("Content-Type", "text/plain");
std::unique_ptr<ResourceRequest> preflight = std::unique_ptr<ResourceRequest> preflight =
...@@ -64,6 +73,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, ...@@ -64,6 +73,7 @@ TEST(PreflightControllerCreatePreflightRequestTest,
TEST(PreflightControllerCreatePreflightRequestTest, IncludeNonSimpleHeader) { TEST(PreflightControllerCreatePreflightRequestTest, IncludeNonSimpleHeader) {
ResourceRequest request; ResourceRequest request;
request.request_initiator = url::Origin();
request.headers.SetHeader("X-Custom-Header", "foobar"); request.headers.SetHeader("X-Custom-Header", "foobar");
std::unique_ptr<ResourceRequest> preflight = std::unique_ptr<ResourceRequest> preflight =
...@@ -78,6 +88,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, IncludeNonSimpleHeader) { ...@@ -78,6 +88,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, IncludeNonSimpleHeader) {
TEST(PreflightControllerCreatePreflightRequestTest, TEST(PreflightControllerCreatePreflightRequestTest,
IncludeNonSimpleContentTypeHeader) { IncludeNonSimpleContentTypeHeader) {
ResourceRequest request; ResourceRequest request;
request.request_initiator = url::Origin();
request.headers.SetHeader("Content-Type", "application/octet-stream"); request.headers.SetHeader("Content-Type", "application/octet-stream");
std::unique_ptr<ResourceRequest> preflight = std::unique_ptr<ResourceRequest> preflight =
...@@ -91,6 +102,7 @@ TEST(PreflightControllerCreatePreflightRequestTest, ...@@ -91,6 +102,7 @@ TEST(PreflightControllerCreatePreflightRequestTest,
TEST(PreflightControllerCreatePreflightRequestTest, ExcludeForbiddenHeaders) { TEST(PreflightControllerCreatePreflightRequestTest, ExcludeForbiddenHeaders) {
ResourceRequest request; ResourceRequest request;
request.request_initiator = url::Origin();
request.headers.SetHeader("referer", "https://www.google.com/"); request.headers.SetHeader("referer", "https://www.google.com/");
std::unique_ptr<ResourceRequest> preflight = std::unique_ptr<ResourceRequest> preflight =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment