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

Unified Diff: components/password_manager/content/browser/content_password_manager_driver.cc

Issue 1212163007: Kill renderers for bad password forms in --site-per-process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: components/password_manager/content/browser/content_password_manager_driver.cc
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc
index ffaf3ac58cef509fbd55ecf7b772da1167bec703..83239f480de44a2f013c5dd0a63bf809d0e65733 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -7,12 +7,15 @@
#include "components/autofill/content/common/autofill_messages.h"
#include "components/autofill/core/common/form_data.h"
#include "components/autofill/core/common/password_form.h"
+#include "components/password_manager/content/browser/bad_message.h"
#include "components/password_manager/content/browser/content_password_manager_driver_factory.h"
#include "components/password_manager/core/browser/password_manager_client.h"
#include "content/public/browser/browser_context.h"
+#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
@@ -151,23 +154,45 @@ bool ContentPasswordManagerDriver::HandleMessage(const IPC::Message& message) {
void ContentPasswordManagerDriver::OnPasswordFormsParsed(
const std::vector<autofill::PasswordForm>& forms) {
+ for (const auto& form : forms)
+ if (!CheckChildProcessSecurityPolicy(
+ form.origin, BadMessageReason::CPMD_BAD_ORIGIN_FORMS_PARSED))
+ return;
+
+ OnPasswordFormsParsedNoRenderCheck(forms);
+}
+
+void ContentPasswordManagerDriver::OnPasswordFormsParsedNoRenderCheck(
+ const std::vector<autofill::PasswordForm>& forms) {
GetPasswordManager()->OnPasswordFormsParsed(this, forms);
}
void ContentPasswordManagerDriver::OnPasswordFormsRendered(
const std::vector<autofill::PasswordForm>& visible_forms,
bool did_stop_loading) {
+ for (const auto& form : visible_forms)
+ if (!CheckChildProcessSecurityPolicy(
+ form.origin, BadMessageReason::CPMD_BAD_ORIGIN_FORMS_RENDERED))
+ return;
GetPasswordManager()->OnPasswordFormsRendered(this, visible_forms,
did_stop_loading);
}
void ContentPasswordManagerDriver::OnPasswordFormSubmitted(
const autofill::PasswordForm& password_form) {
+ if (!CheckChildProcessSecurityPolicy(
+ password_form.origin,
+ BadMessageReason::CPMD_BAD_ORIGIN_FORM_SUBMITTED))
+ return;
GetPasswordManager()->OnPasswordFormSubmitted(this, password_form);
}
void ContentPasswordManagerDriver::OnFocusedPasswordFormFound(
const autofill::PasswordForm& password_form) {
+ if (!CheckChildProcessSecurityPolicy(
+ password_form.origin,
+ BadMessageReason::CPMD_BAD_ORIGIN_FOCUSED_PASSWORD_FORM_FOUND))
+ return;
GetPasswordManager()->OnPasswordFormForceSaveRequested(this, password_form);
}
@@ -183,13 +208,35 @@ void ContentPasswordManagerDriver::DidNavigateFrame(
void ContentPasswordManagerDriver::OnInPageNavigation(
const autofill::PasswordForm& password_form) {
+ if (!CheckChildProcessSecurityPolicy(
+ password_form.origin,
+ BadMessageReason::CPMD_BAD_ORIGIN_IN_PAGE_NAVIGATION))
+ return;
GetPasswordManager()->OnInPageNavigation(this, password_form);
}
void ContentPasswordManagerDriver::OnPasswordNoLongerGenerated(
const autofill::PasswordForm& password_form) {
+ if (!CheckChildProcessSecurityPolicy(
+ password_form.origin,
+ BadMessageReason::CPMD_BAD_ORIGIN_PASSWORD_NO_LONGER_GENERATED))
+ return;
GetPasswordManager()->SetHasGeneratedPasswordForForm(this, password_form,
false);
}
+bool ContentPasswordManagerDriver::CheckChildProcessSecurityPolicy(
+ const GURL& url,
+ BadMessageReason reason) {
+ content::ChildProcessSecurityPolicy* policy =
+ content::ChildProcessSecurityPolicy::GetInstance();
+ if (!policy->CanAccessDataForOrigin(render_frame_host_->GetProcess()->GetID(),
+ url)) {
+ bad_message::ReceivedBadMessage(render_frame_host_->GetProcess(), reason);
+ return false;
+ }
+
+ return true;
+}
+
} // namespace password_manager

Powered by Google App Engine
This is Rietveld 408576698