aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-02-07 16:15:40 +0100
committerFlorian Dold <florian.dold@gmail.com>2018-02-07 16:15:40 +0100
commitf1bef0473bf5e3f2661dd6ba82f6350164ff69ab (patch)
tree528f0125de466c6cb2fd64b8be71700c29f86e1e
parent9b0cd71a4dea13fa80c69d0ff8644e3a77c34874 (diff)
prevent embedding wallet pages in other web pages
-rw-r--r--gulpfile.js2
-rw-r--r--manifest.json2
-rw-r--r--src/i18n/de.po28
-rw-r--r--src/i18n/en-US.po28
-rw-r--r--src/i18n/fr.po28
-rw-r--r--src/i18n/it.po28
-rw-r--r--src/i18n/taler-wallet-webex.pot28
-rw-r--r--src/webex/pages/redirect.html14
-rw-r--r--src/webex/pages/redirect.js12
-rw-r--r--src/webex/wxBackend.ts37
10 files changed, 120 insertions, 87 deletions
diff --git a/gulpfile.js b/gulpfile.js
index f8e0c90fa..f9ba97b74 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -73,7 +73,7 @@ const paths = {
"emscripten/taler-emscripten-lib.js",
"img/icon.png",
"img/logo.png",
- "src/**/*.{css,html}",
+ "src/**/*.{js,css,html}",
],
// for the source distribution
extra: [
diff --git a/manifest.json b/manifest.json
index 271cceeb1..3df7aa687 100644
--- a/manifest.json
+++ b/manifest.json
@@ -50,7 +50,7 @@
],
"web_accessible_resources": [
- "src/*"
+ "src/webex/pages/redirect.html"
],
"background": {
diff --git a/src/i18n/de.po b/src/i18n/de.po
index 37748180d..d96299de1 100644
--- a/src/i18n/de.po
+++ b/src/i18n/de.po
@@ -206,41 +206,41 @@ msgstr ""
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:309
+#: src/webex/pages/popup.tsx:310
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:337
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:338
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:339
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:350
+#: src/webex/pages/popup.tsx:351
#, fuzzy, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr "Bank bestätig anlegen der Reserve (%1$s) bei %2$s"
-#: src/webex/pages/popup.tsx:360
+#: src/webex/pages/popup.tsx:361
#, fuzzy, c-format
msgid ""
"Started to withdraw\n"
" %1$s%2$sfrom%3$s(%4$s).\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:369
+#: src/webex/pages/popup.tsx:370
#, fuzzy, c-format
msgid "Merchant%1$soffered%2$scontract%3$s.\n"
msgstr ""
@@ -248,24 +248,24 @@ msgstr ""
" möchte einen Vertrag über %2$s\n"
" mit Ihnen abschließen."
-#: src/webex/pages/popup.tsx:380
+#: src/webex/pages/popup.tsx:381
#, fuzzy, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:390
+#: src/webex/pages/popup.tsx:391
#, fuzzy, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
"%3$s(%4$s)\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:400
+#: src/webex/pages/popup.tsx:401
#, c-format
msgid "Merchant%1$sgave a refund over%2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:410
+#: src/webex/pages/popup.tsx:411
#, fuzzy, c-format
msgid ""
"Merchant%1$sgave\n"
@@ -276,17 +276,17 @@ msgstr ""
" möchte einen Vertrag über %2$s\n"
" mit Ihnen abschließen."
-#: src/webex/pages/popup.tsx:420
+#: src/webex/pages/popup.tsx:421
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:463
+#: src/webex/pages/popup.tsx:464
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:488
+#: src/webex/pages/popup.tsx:489
#, c-format
msgid "Your wallet has no events recorded."
msgstr "Ihre Geldbörse verzeichnet keine Vorkommnisse."
diff --git a/src/i18n/en-US.po b/src/i18n/en-US.po
index c56d57f44..665b2771a 100644
--- a/src/i18n/en-US.po
+++ b/src/i18n/en-US.po
@@ -206,63 +206,63 @@ msgstr ""
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:309
+#: src/webex/pages/popup.tsx:310
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:337
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:338
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:339
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:350
+#: src/webex/pages/popup.tsx:351
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:360
+#: src/webex/pages/popup.tsx:361
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s%2$sfrom%3$s(%4$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:369
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered%2$scontract%3$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:380
+#: src/webex/pages/popup.tsx:381
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:390
+#: src/webex/pages/popup.tsx:391
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
"%3$s(%4$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:400
+#: src/webex/pages/popup.tsx:401
#, c-format
msgid "Merchant%1$sgave a refund over%2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:410
+#: src/webex/pages/popup.tsx:411
#, c-format
msgid ""
"Merchant%1$sgave\n"
@@ -270,17 +270,17 @@ msgid ""
"%4$s%5$s"
msgstr ""
-#: src/webex/pages/popup.tsx:420
+#: src/webex/pages/popup.tsx:421
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:463
+#: src/webex/pages/popup.tsx:464
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:488
+#: src/webex/pages/popup.tsx:489
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/fr.po b/src/i18n/fr.po
index b5b7259ee..4a50742b8 100644
--- a/src/i18n/fr.po
+++ b/src/i18n/fr.po
@@ -206,63 +206,63 @@ msgstr ""
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:309
+#: src/webex/pages/popup.tsx:310
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:337
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:338
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:339
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:350
+#: src/webex/pages/popup.tsx:351
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:360
+#: src/webex/pages/popup.tsx:361
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s%2$sfrom%3$s(%4$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:369
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered%2$scontract%3$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:380
+#: src/webex/pages/popup.tsx:381
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:390
+#: src/webex/pages/popup.tsx:391
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
"%3$s(%4$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:400
+#: src/webex/pages/popup.tsx:401
#, c-format
msgid "Merchant%1$sgave a refund over%2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:410
+#: src/webex/pages/popup.tsx:411
#, c-format
msgid ""
"Merchant%1$sgave\n"
@@ -270,17 +270,17 @@ msgid ""
"%4$s%5$s"
msgstr ""
-#: src/webex/pages/popup.tsx:420
+#: src/webex/pages/popup.tsx:421
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:463
+#: src/webex/pages/popup.tsx:464
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:488
+#: src/webex/pages/popup.tsx:489
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/it.po b/src/i18n/it.po
index b5b7259ee..4a50742b8 100644
--- a/src/i18n/it.po
+++ b/src/i18n/it.po
@@ -206,63 +206,63 @@ msgstr ""
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:309
+#: src/webex/pages/popup.tsx:310
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:337
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:338
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:339
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:350
+#: src/webex/pages/popup.tsx:351
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:360
+#: src/webex/pages/popup.tsx:361
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s%2$sfrom%3$s(%4$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:369
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered%2$scontract%3$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:380
+#: src/webex/pages/popup.tsx:381
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:390
+#: src/webex/pages/popup.tsx:391
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
"%3$s(%4$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:400
+#: src/webex/pages/popup.tsx:401
#, c-format
msgid "Merchant%1$sgave a refund over%2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:410
+#: src/webex/pages/popup.tsx:411
#, c-format
msgid ""
"Merchant%1$sgave\n"
@@ -270,17 +270,17 @@ msgid ""
"%4$s%5$s"
msgstr ""
-#: src/webex/pages/popup.tsx:420
+#: src/webex/pages/popup.tsx:421
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:463
+#: src/webex/pages/popup.tsx:464
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:488
+#: src/webex/pages/popup.tsx:489
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/taler-wallet-webex.pot b/src/i18n/taler-wallet-webex.pot
index b5b7259ee..4a50742b8 100644
--- a/src/i18n/taler-wallet-webex.pot
+++ b/src/i18n/taler-wallet-webex.pot
@@ -206,63 +206,63 @@ msgstr ""
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:309
+#: src/webex/pages/popup.tsx:310
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:336
+#: src/webex/pages/popup.tsx:337
#, c-format
msgid "Payback"
msgstr ""
-#: src/webex/pages/popup.tsx:337
+#: src/webex/pages/popup.tsx:338
#, c-format
msgid "Return Electronic Cash to Bank Account"
msgstr ""
-#: src/webex/pages/popup.tsx:338
+#: src/webex/pages/popup.tsx:339
#, c-format
msgid "Manage Trusted Auditors and Exchanges"
msgstr ""
-#: src/webex/pages/popup.tsx:350
+#: src/webex/pages/popup.tsx:351
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:360
+#: src/webex/pages/popup.tsx:361
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s%2$sfrom%3$s(%4$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:369
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered%2$scontract%3$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:380
+#: src/webex/pages/popup.tsx:381
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:390
+#: src/webex/pages/popup.tsx:391
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
"%3$s(%4$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:400
+#: src/webex/pages/popup.tsx:401
#, c-format
msgid "Merchant%1$sgave a refund over%2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:410
+#: src/webex/pages/popup.tsx:411
#, c-format
msgid ""
"Merchant%1$sgave\n"
@@ -270,17 +270,17 @@ msgid ""
"%4$s%5$s"
msgstr ""
-#: src/webex/pages/popup.tsx:420
+#: src/webex/pages/popup.tsx:421
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:463
+#: src/webex/pages/popup.tsx:464
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:488
+#: src/webex/pages/popup.tsx:489
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/webex/pages/redirect.html b/src/webex/pages/redirect.html
new file mode 100644
index 000000000..9d07d3d2b
--- /dev/null
+++ b/src/webex/pages/redirect.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta charset="utf-8">
+
+ <script src="/src/webex/pages/redirect.js"></script>
+</head>
+
+<body>
+ Redirecting to extension page ...
+</body>
+
+</html>
diff --git a/src/webex/pages/redirect.js b/src/webex/pages/redirect.js
new file mode 100644
index 000000000..5a758cce4
--- /dev/null
+++ b/src/webex/pages/redirect.js
@@ -0,0 +1,12 @@
+/**
+ * This is the entry point for redirects, and should be the only
+ * web-accessible resource declared in the manifest. This prevents
+ * malicious websites from embedding wallet pages in them.
+ *
+ * We still need this redirect page since a webRequest can only directly
+ * redirect to pages inside the extension that are a web-accessible resource.
+ */
+
+
+const myUrl = new URL(window.location.href);
+window.location.replace(myUrl.searchParams.get("url"));
diff --git a/src/webex/wxBackend.ts b/src/webex/wxBackend.ts
index a778cc986..f1116637d 100644
--- a/src/webex/wxBackend.ts
+++ b/src/webex/wxBackend.ts
@@ -449,6 +449,21 @@ async function talerPay(fields: any, url: string, tabId: number): Promise<string
}
+function makeSyncWalletRedirect(url: string, params?: {[name: string]: string | undefined}): object {
+ const innerUrl = new URI(chrome.extension.getURL("/src/webex/pages/" + url));
+ if (params) {
+ for (const key in params) {
+ if (params[key]) {
+ innerUrl.addSearch(key, params[key]);
+ }
+ }
+ }
+ const outerUrl = new URI(chrome.extension.getURL("/src/webex/pages/redirect.html"));
+ outerUrl.addSearch("url", innerUrl);
+ return { redirectUrl: outerUrl.href() };
+}
+
+
/**
* Handle a HTTP response that has the "402 Payment Required" status.
* In this callback we don't have access to the body, and must communicate via
@@ -497,30 +512,22 @@ function handleHttpPayment(headerList: chrome.webRequest.HttpHeader[], url: stri
}
// Synchronous fast path for new contract
if (fields.contract_url) {
- const uri = new URI(chrome.extension.getURL("/src/webex/pages/confirm-contract.html"));
- uri.addSearch("contractUrl", fields.contract_url);
- if (fields.session_id) {
- uri.addSearch("sessionId", fields.session_id);
- }
- if (fields.resource_url) {
- uri.addSearch("resourceUrl", fields.resource_url);
- }
- return { redirectUrl: uri.href() };
+ return makeSyncWalletRedirect("confirm-contract.html", {
+ contractUrl: fields.contract_url,
+ sessionId: fields.session_id,
+ resourceUrl: fields.resource_url,
+ });
}
// Synchronous fast path for tip
if (fields.tip) {
- const uri = new URI(chrome.extension.getURL("/src/webex/pages/tip.html"));
- uri.query({ tip_token: fields.tip });
- return { redirectUrl: uri.href() };
+ return makeSyncWalletRedirect("tip.html", { tip_token: fields.tip });
}
// Synchronous fast path for refund
if (fields.refund_url) {
console.log("processing refund");
- const uri = new URI(chrome.extension.getURL("/src/webex/pages/refund.html"));
- uri.query({ refundUrl: fields.refund_url });
- return { redirectUrl: uri.href() };
+ return makeSyncWalletRedirect("refund.html", { refundUrl: fields.refund_url });
}
// We need to do some asynchronous operation, we can't directly redirect