Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9adae6c9c7 |
@@ -2080,9 +2080,12 @@ view would leave a wallet one click from deletion.
|
|||||||
`wallet_requestPermissions` and is on neither the allowed nor the denied list.
|
`wallet_requestPermissions` and is on neither the allowed nor the denied list.
|
||||||
A site is its full origin, `scheme://host[:port]`, on both lists and for a
|
A site is its full origin, `scheme://host[:port]`, on both lists and for a
|
||||||
connection allowed without "Remember": a choice for `https://dapp.example`
|
connection allowed without "Remember": a choice for `https://dapp.example`
|
||||||
says nothing about `http://dapp.example` or another port of that host. The
|
says nothing about `http://dapp.example` or another port of that host. A page
|
||||||
background script prefers the toolbar popup (`action.openPopup()`) and falls
|
with an opaque origin, such as one its server sandboxes with a
|
||||||
back to a separate popup window (`src/background/index.js`,
|
Content-Security-Policy, is reported with the origin `null`, which is no site:
|
||||||
|
every request from it is refused with EIP-1193 code `4100` and opens no
|
||||||
|
prompt. The background script prefers the toolbar popup (`action.openPopup()`)
|
||||||
|
and falls back to a separate popup window (`src/background/index.js`,
|
||||||
`requestApproval()`). Only one exists per site at a time: a further connection
|
`requestApproval()`). Only one exists per site at a time: a further connection
|
||||||
request from a site whose prompt is still unanswered is refused with EIP-1193
|
request from a site whose prompt is still unanswered is refused with EIP-1193
|
||||||
code `-32002` and opens no new prompt. If that prompt was in a toolbar popup
|
code `-32002` and opens no new prompt. If that prompt was in a toolbar popup
|
||||||
|
|||||||
@@ -1428,6 +1428,11 @@ runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
|||||||
// the origin of sender.url is used: the frame that sent the message,
|
// the origin of sender.url is used: the frame that sent the message,
|
||||||
// not the tab's page, which may be another site embedding that
|
// not the tab's page, which may be another site embedding that
|
||||||
// frame. With neither, the request is refused.
|
// frame. With neither, the request is refused.
|
||||||
|
//
|
||||||
|
// A page with an opaque origin, such as one its server sandboxes with
|
||||||
|
// a Content-Security-Policy, is reported with the origin "null". That
|
||||||
|
// is no site, so the request is refused too, and not credited to the
|
||||||
|
// site its URL names.
|
||||||
let trustedOrigin = sender.origin;
|
let trustedOrigin = sender.origin;
|
||||||
if (!trustedOrigin && sender.url) {
|
if (!trustedOrigin && sender.url) {
|
||||||
try {
|
try {
|
||||||
@@ -1436,7 +1441,7 @@ runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
|||||||
// an unparseable URL leaves the origin unknown
|
// an unparseable URL leaves the origin unknown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!trustedOrigin) {
|
if (!trustedOrigin || trustedOrigin === "null") {
|
||||||
sendResponse({
|
sendResponse({
|
||||||
error: {
|
error: {
|
||||||
code: 4100,
|
code: 4100,
|
||||||
|
|||||||
+28
-2
@@ -8,8 +8,14 @@
|
|||||||
// and a request the browser said nothing about was credited to whatever the
|
// and a request the browser said nothing about was credited to whatever the
|
||||||
// page wrote (https://git.eeqj.de/sneak/AutistMask/issues/407).
|
// page wrote (https://git.eeqj.de/sneak/AutistMask/issues/407).
|
||||||
//
|
//
|
||||||
// Every sender here lacks sender.origin, as on old Firefox. The connection
|
// A page with an opaque origin, such as one its server sandboxes with a
|
||||||
// check on eth_accounts is what shows which site a request was credited to.
|
// Content-Security-Policy, is reported with the origin "null". That names no
|
||||||
|
// site, so its request is refused
|
||||||
|
// (https://git.eeqj.de/sneak/AutistMask/issues/527).
|
||||||
|
//
|
||||||
|
// Every other sender here lacks sender.origin, as on old Firefox. The
|
||||||
|
// connection check on eth_accounts is what shows which site a request was
|
||||||
|
// credited to.
|
||||||
|
|
||||||
const { makeStorageStub } = require("./support/storageStub");
|
const { makeStorageStub } = require("./support/storageStub");
|
||||||
|
|
||||||
@@ -144,3 +150,23 @@ describe("a request the browser does not say the sender of", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("a request from a page with an opaque origin", () => {
|
||||||
|
test("is refused, whatever the page's URL says", async () => {
|
||||||
|
const accounts = loadBackground();
|
||||||
|
|
||||||
|
const result = await accounts({
|
||||||
|
origin: "null",
|
||||||
|
url: CONNECTED_ORIGIN + "/sandboxed.html",
|
||||||
|
tab: { url: CONNECTED_ORIGIN + "/sandboxed.html" },
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result).toEqual({
|
||||||
|
error: {
|
||||||
|
code: 4100,
|
||||||
|
message:
|
||||||
|
"The wallet could not tell which site sent this request.",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user