mirror of
https://github.com/github/codeql.git
synced 2026-04-25 00:35:20 +02:00
JS: Treat browser message events as client-side sources
This commit is contained in:
@@ -207,12 +207,14 @@ class PostMessageEventHandler extends Function {
|
||||
* An event parameter for a `postMessage` event handler, considered as an untrusted
|
||||
* source of data.
|
||||
*/
|
||||
private class PostMessageEventParameter extends RemoteFlowSource {
|
||||
private class PostMessageEventParameter extends ClientSideRemoteFlowSource {
|
||||
PostMessageEventParameter() {
|
||||
this = DataFlow::parameterNode(any(PostMessageEventHandler pmeh).getEventParameter())
|
||||
}
|
||||
|
||||
override string getSourceType() { result = "postMessage event" }
|
||||
|
||||
override ClientSideRemoteFlowKind getKind() { result.isMessageEvent() }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,7 +40,9 @@ import Cached
|
||||
* A type of remote flow source that is specific to the browser environment.
|
||||
*/
|
||||
class ClientSideRemoteFlowKind extends string {
|
||||
ClientSideRemoteFlowKind() { this = ["query", "fragment", "path", "url", "name"] }
|
||||
ClientSideRemoteFlowKind() {
|
||||
this = ["query", "fragment", "path", "url", "name", "message-event"]
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if this is the `query` kind, describing sources derived from the query parameters of the browser URL,
|
||||
@@ -77,6 +79,12 @@ class ClientSideRemoteFlowKind extends string {
|
||||
|
||||
/** Holds if this is the `name` kind, describing sources derived from the window name, such as `window.name`. */
|
||||
predicate isWindowName() { this = "name" }
|
||||
|
||||
/**
|
||||
* Holds if this is the `message-event` kind, describing sources derived from cross-window message passing,
|
||||
* such as `event` in `window.onmessage = event => {...}`.
|
||||
*/
|
||||
predicate isMessageEvent() { this = "message-event" }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user