Skip to content

Commit b5193d9

Browse files
committed
have getSourceType() depend on which kind of event it is
1 parent e0b5197 commit b5193d9

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,26 +67,37 @@ private DataFlow::SourceNode taintedEvent(DataFlow::TypeTracker t, string event)
6767
* Gets a reference to a DataTransfer object.
6868
* https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/clipboardData
6969
*/
70-
private DataFlow::SourceNode taintedDataTransfer(DataFlow::TypeTracker t) {
70+
private DataFlow::SourceNode taintedDataTransfer(DataFlow::TypeTracker t, string event) {
7171
t.start() and
72-
result = taintedEvent(DataFlow::TypeTracker::end(), "paste").getAPropertyRead("clipboardData")
72+
result = taintedEvent(DataFlow::TypeTracker::end(), event).getAPropertyRead("clipboardData") and
73+
event = "paste"
7374
or
7475
t.start() and
75-
result =
76-
taintedEvent(DataFlow::TypeTracker::end(), ["drop", "beforeinput"])
77-
.getAPropertyRead("dataTransfer")
76+
result = taintedEvent(DataFlow::TypeTracker::end(), event).getAPropertyRead("dataTransfer") and
77+
event = ["drop", "beforeinput"]
7878
or
79-
exists(DataFlow::TypeTracker t2 | result = taintedDataTransfer(t2).track(t2, t))
79+
exists(DataFlow::TypeTracker t2 | result = taintedDataTransfer(t2, event).track(t2, t))
8080
}
8181

8282
/**
8383
* A reference to data from a DataTransfer object, which might originate from e.g. the clipboard.
8484
* Seen as a source for DOM-based XSS.
8585
*/
8686
private class TaintedDataTransfer extends RemoteFlowSource {
87+
string event;
88+
8789
TaintedDataTransfer() {
88-
this = taintedDataTransfer(DataFlow::TypeTracker::end()).getAMethodCall("getData")
90+
this = taintedDataTransfer(DataFlow::TypeTracker::end(), event).getAMethodCall("getData")
8991
}
9092

91-
override string getSourceType() { result = "Clipboard data" }
93+
override string getSourceType() {
94+
event = "paste" and
95+
result = "Clipboard data"
96+
or
97+
event = "drop" and
98+
result = "Drag&Drop data"
99+
or
100+
event = "beforeinput" and
101+
result = "Input data"
102+
}
92103
}

0 commit comments

Comments
 (0)